将vlookup值赋给一个变量
问题描述:
不是将一个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”
你能帮助我,让我知道我做错了什么吗? :(
答
这是各种错误的 - 让我解释一下:
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(R19C9,Database!R1C8:R12C9,2,FALSE)", xlR1C1, xlA1))
如果搜索值没有在数据库中存在的范围内,这可能仍然引发错误。
+1
好点@ScottCraner –
答
您可以使用此:
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
没有任何问题的答案为你工作?本网站欣欣向荣。如果有任何工作,请点击答案上的复选标记标记为正确。如果他们不工作,请让我们知道出了什么问题,这样我们可以更好地回答问题。 –