使用VBA执行vlookup

时间:2016-05-01 06:45:31

标签: excel vba

我使用以下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

2 个答案:

答案 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