gpt4 book ai didi

vba - Excel VBA VLookup - 错误 13 - "Type Mismatch"

转载 作者:行者123 更新时间:2023-12-02 18:11:29 26 4
gpt4 key购买 nike

我正在开发一个 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 因为我需要自动向客户发送电子邮件)

感谢任何帮助!

最佳答案

我的猜测是,不是您的 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 中返回错误,而不是尝试将其返回到变量。

关于vba - Excel VBA VLookup - 错误 13 - "Type Mismatch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com