Excel VBA VLookup – 错误13 – “types不匹配”

我正在从Excel VBAmacros,从另一个工作表获取客户端的电子邮件。

我从VLookup得到错误13“types不匹配”:

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时,它会popup完美。

(我使用VBA,因为我需要发送自动电子邮件给客户端)

任何帮助apreciated!

我的猜测是,这不是你的VLOOKUP引发types不匹配的错误,而是将其返回值赋给一个string。 你的VLOOKUP可能试图给一个string分配一个错误值,并给出一个types不匹配。 尝试使用一个变体。

另外,在循环中声明variables会烧伤我的眼睛。 请不要这样做。 除了设置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 

这样你的代码将工作,但你的emailadressvariables可能包含一个错误。 检查一下。

编辑:

如果你使用application.worksheetfunction.vlookup,它可能会更好。 如果Vlookup引发了一个错误,它只是在VBA中返回一个错误,而不是试图将它返回给一个variables。

你可以试试这个,如果你的范围或者值来自于一个string或者数字格式不好的数据库,它可能会工作:

 emailadress = Application.VLookup(WorksheetFunction.Text(client_name), lookup_mail, 4, False) 

干杯,

帕斯卡尔

http://multiskillz.tekcities.com