Excel VBA VLookup - 错误 13 - "Type Mismatch"
Excel VBA VLookup - Error 13 - "Type Mismatch"
我正在开发一个 Excel VBA 宏,它从另一个 sheet.
获取客户的电子邮件
我从 VLookup 中收到错误 13 "Type Mismatch":
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)
所以我猜我 "declare?" client_name 的方式有问题。这很奇怪,因为当我在 MsgBox 中输出 client_name 时,它会完美弹出。
(我使用 VBA 因为我需要向客户发送自动电子邮件)
感谢任何帮助!
您可以试试这个,如果您的范围或值来自字符串或数字格式不佳的数据库,它可能会起作用:
emailadress = Application.VLookup(WorksheetFunction.Text(client_name), lookup_mail, 4, False)
干杯,
帕斯卡
我的猜测是,引发类型不匹配错误的不是您的 VLOOKUP,而是将其 return 值分配给字符串。您的 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 中返回一个错误,而不是试图将它 return 到一个变量。
我正在开发一个 Excel VBA 宏,它从另一个 sheet.
获取客户的电子邮件我从 VLookup 中收到错误 13 "Type Mismatch":
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)
所以我猜我 "declare?" client_name 的方式有问题。这很奇怪,因为当我在 MsgBox 中输出 client_name 时,它会完美弹出。
(我使用 VBA 因为我需要向客户发送自动电子邮件)
感谢任何帮助!
您可以试试这个,如果您的范围或值来自字符串或数字格式不佳的数据库,它可能会起作用:
emailadress = Application.VLookup(WorksheetFunction.Text(client_name), lookup_mail, 4, False)
干杯,
帕斯卡
我的猜测是,引发类型不匹配错误的不是您的 VLOOKUP,而是将其 return 值分配给字符串。您的 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 中返回一个错误,而不是试图将它 return 到一个变量。