2016-10-10 189 views
0

不是將一個vlookup公式的結果添加到一個單元格中,而是試圖僅將結果賦值給一個變量但不起作用。將vlookup值賦給一個變量

值是「九」,其結果一定是9,但我的VBA代碼在MSGBOX

Sub Test() 
Dim TableName2 As Integer 

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)" 

MsgBox (TableName2) 

End Sub 

我試圖改變變量爲字符串返回0和MSGBOX顯示「FALSE」

你能幫助我,讓我知道我做錯了什麼嗎? :(

+0

沒有任何問題的答案爲你工作?本網站欣欣向榮。如果有任何工作,請點擊答案上的複選標記標記爲正確。如果他們不工作,請讓我們知道出了什麼問題,這樣我們可以更好地回答問題。 –

回答

2

這是各種錯誤的 - 讓我解釋一下:

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)" 

這是一個布爾表達式,它說:

TableName2 = (FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)") 

FormulaR1C1不是一個變量名稱,以便將評估爲空字符串或空數值,當與VLOOKUP公式字符串進行比較時,將返回該賦值語句右側的False值,即:

TableName2 = False 

False被強制轉換爲整數值(TableName2顯式聲明爲一個整數,所以有一個隱式類型轉換髮生),結果是在你的MsgBox聲明0

相反,嘗試:

TableName2 = Application.Evaluate(_ 
      Application.ConvertFormula(_ 
      "=VLOOKUP(R1‌​9C9,Database!R1C8:R1‌​2C9,2,FALSE)", xlR1C1, xlA1)) 

如果搜索值沒有在數據庫中存在的範圍內,這可能仍然引發錯誤。

+1

好點@ScottCraner –

1

您可以使用此:

Sub Test() 
Dim TableName2 As Integer 

On Error Resume Next 
TableName2 = Application.WorksheetFunction.VLookup(ActiveSheet.Range("I19"), Worksheets("Database").Range("H1:I12"), 2, False) 
On Error GoTo 0 
If TableName2 = 0 Then 
    MsgBox "The month is mistyped as a match was not found" 
Else 
    MsgBox (TableName2) 
End If 

End Sub