我没有将vlookup公式的结果添加到单元格,而是尝试仅将结果分配给变量但不起作用。
值为“九月”,结果必须为9,但我的vba代码在Msgbox中返回0
Sub Test()
Dim TableName2 As Integer
TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"
MsgBox (TableName2)
End Sub
我试图将变量更改为字符串,而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
显式声明为整数,因此会发生隐式类型转换),结果为0
MsgBox
声明。
相反,请尝试:
TableName2 = Application.Evaluate( _
Application.ConvertFormula( _
"=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)", xlR1C1, xlA1))
如果搜索到的值不存在于数据库范围内,则可能仍会引发错误。
答案 1 :(得分: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