我正在使用Excel VBA宏从另一张表中获取客户端的电子邮件。
我收到错误13"输入错误"来自VLookup:
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因为我需要向客户发送自动电子邮件)
任何有帮助的帮助!
答案 0 :(得分:3)
我的猜测是,不是你的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中返回错误,并且不会尝试将其返回给变量。
答案 1 :(得分:0)
你可以尝试一下,如果你的范围或值来自字符串或数字格式不佳的数据库,它可能会有效:
emailadress = Application.VLookup(WorksheetFunction.Text(client_name), lookup_mail, 4, False)
干杯,
帕斯卡