[英]Excel VBA VLookup - Error 13 - “Type Mismatch”
我正在使用Excel VBA宏从另一个工作表中获取客户端的电子邮件。
我从VLookup获得错误13“类型不匹配”:
For Each c In Range("D3:D130").Cells
If c > 500 Then
Dim emailadress As String
Dim client_name As String
Dim lookup_mail As Range
Set lookup_mail = Sheets("MAILS").Range("A1:D130")
client_name = Range("A" & (c.Row)).Value
emailadress = Application.VLookup(client_name, lookup_mail, 4, False)
如果我这样做它可以正常工作:
emailadress = Application.VLookup("John Doe", lookup_mail, 4, False)
所以我觉得我“申报”的方式有问题吗? 客户名称。 这很奇怪,因为当我在MsgBox中输出client_name时,它会完美弹出。
(我使用VBA因为我需要向客户发送自动电子邮件)
任何帮助apreciated!
我的猜测是,不是你的VLOOKUP引发了类型不匹配错误,而是将其返回值赋给字符串。 您的VLOOKUP可能正在尝试为字符串分配错误值,这会导致类型不匹配。 请尝试使用变体。
另外,在循环内声明变量会让我眼前一亮。 请不要这样做。 您可以在循环外实际执行的所有操作也是如此,例如设置lookup_mail范围。
Dim emailadress As Variant
Dim client_name As String
Dim lookup_mail As Range
Dim c As Range
Set lookup_mail = Sheets("MAILS").Range("A1:B3")
For Each c In Range("D3:D130").Cells
If c.Value > 500 Then
client_name = Range("A" & (c.Row)).Value
emailadress = Application.VLookup(client_name, lookup_mail, 4, False)
End If
Next
这样您的代码就可以工作,但是您的emailadress变量可能包含错误。 检查一下。
编辑:
如果您使用application.worksheetfunction.vlookup,它可能会更好。 如果Vlookup引发错误,它只会在VBA中返回错误,并且不会尝试将其返回到变量。
您可以试试这个,如果您的范围或值来自字符串或数字格式不佳的数据库,它可能会起作用:
emailadress = Application.VLookup(WorksheetFunction.Text(client_name), lookup_mail, 4, False)
干杯,
帕斯卡尔
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.