我使用以下vba代码执行vlookup。奇怪的是,只有当查找值中有文本时(单元格C1),它才有效。如果单元格C1中的查找值是数字(不是文本),则它不起作用。有什么想法吗?
Sub FINDVAL()
On Error GoTo MyErrorHandler:
Dim E_name As String
E_name = Range("C1").Value
If Len(E_name) > 0 Then
Sal = Application.WorksheetFunction.VLookup(E_name, Sheet1.Range("A1:B100000"), 2, False)
MsgBox "Salary is : $ " & Sal
Else
MsgBox ("You entered an invalid value")
End If
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then
MsgBox "Employee Not Present in the table."
End If
End Sub
答案 0 :(得分:0)
要回答未来引用的问题,如果由于某种原因需要将变量声明为字符串,但也会遇到整数。你可以这样做。
If Len(E_name) > 0 Then
If IsNumeric(E_name) Then
Sal = Application.WorksheetFunction.VLookup(CDbl(E_name), Sheet1.Range("A1:B100000"), 2, False)
Else
Sal = Application.WorksheetFunction.VLookup(E_name, Sheet1.Range("A1:B100000"), 2, False)
End If
MsgBox "Salary is : $ " & Sal
Else
MsgBox ("You entered an invalid value")
End If
答案 1 :(得分:0)
这是因为您将变量E_name
声明为String
。此类声明后的任何变量初始化只接受String
值。
如果您确定变量的所有实例都具有相同的数据类型,则只定义变量的数据类型。
在这种情况下,由于C1
中可以包含数字和字符值,因此应声明E_name
数据类型Variant
,这是一种通用数据类型。强>
如有疑问,请使用TypeName()
方法检查变量的数据类型。
示例:
Public Sub variantTest()
Dim E_name As Variant
E_name = "John"
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "John:String"
E_name = 2
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "2:Integer"
E_name = 9.99
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "9.99:Double"
E_name = #1/1/2016#
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "01-01-2016:Date"
End Sub