簡體   English   中英

使用VBA執行vlookup

[英]Using VBA to perform a vlookup

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

要回答該問題以備將來參考,如果由於某種原因需要將變量聲明為字符串,但也會遇到整數。 你可以做這樣的事情。

 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

這是因為您將變量E_name聲明為String 此類聲明之后的任何變量初始化將僅接受String值。

僅在確定變量的所有實例都屬於同一數據類型時 ,才定義變量的數據類型。

在這種情況下,由於C1可以包含數字和字符值,因此應聲明數據類型Variant E_name ,該數據類型是通用數據類型。

如有疑問,請使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM