2016-10-10 302 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