繁体   English   中英

Excel VBA VLookup - 错误13 - “类型不匹配”

[英]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)

干杯,

帕斯卡尔

http://multiskillz.tekcities.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM