【问题标题】:Type Mismatch in VLookup using VBA使用 VBA 在 VLookup 中键入不匹配
【发布时间】:2023-02-17 09:47:51
【问题描述】:

我正在创建一个电子表格应用程序,用于为我的团队自动生成电子邮件内容。并非每个人都使用相同的电子邮件客户端,因此目标是将数据写入 Microsoft 剪贴板以便于粘贴。

为了保留格式,我创建了一个表格,其中包含要连接并写入剪贴板的各种文本块。我有四个电子邮件模板,除一个模板外,其他一切正常。

这是一段代码:

If EmailTemplate = "How-To" Then

    EmailSub = "OAS: How-To Guide"
    
    EmailCode1 = Evaluate("VLookup(Email_Type,EmailBodies,2,False)")
    
    RepEmail = Evaluate("VLookup(Email_Type, EmailBodies, 3, False)")
    
    EmailCode2 = Evaluate("VLookup(Email_Type, EmailBodies, 4, False)")
    
    RepCalendar = Evaluate("VLookup(Email_Type, EmailBodies, 5, False)")
    
    EmailCode3 = Evaluate("VLookup(Email_Type, EmailBodies, 6, False)")
    
ElseIf EmailTemplate = "PQW" Then

    EmailSub = "When You Are Ready, Please Tell Us About Your Project Requirements"
    
    EmailCode1 = Evaluate("VLookup(Email_Type,EmailBodies,2,False)")
    
    RepEmail = Evaluate("VLookup(Email_Type, EmailBodies, 3, False)")
    
    EmailCode2 = Evaluate("VLookup(Email_Type, EmailBodies, 4, False)")
    
    RepCalendar = Evaluate("VLookup(Email_Type, EmailBodies, 5, False)")
    
    EmailCode3 = Evaluate("VLookup(Email_Type, EmailBodies, 6, False)")

我正在使用 Vlookup 函数引用一个表。

第一个条件 EmailTemplate = "How-To" 有效,但是对于“PQW”我在分配变量 EmailCode1 时收到类型不匹配错误。

对于“操作方法”,单元格中的文本是:

感谢您对 Open Automation Software 的关注。请参阅下面的链接以获取有关完成指定要求的指导:

对于“PQW”,它是:

请告诉我们更多关于您的项目要求。通过填写此工作表,我们可以更轻松地帮助您集中精力评估对您重要的软件部分。

请花几分钟时间填写并发回邮件至

两者都包含换行符并且都只包含文本。您在代码中看到的所有变量都是字符串数据类型。

我努力了:

  1. 将单元格数据类型设置为文本
  2. 验证 Vlookup 搜索的字符串术语是否与表中显示的内容完全匹配。
  3. 将所有变量的数据类型更改为 Variant。
  4. 删除我的表中有问题的行并手动创建一个副本。
  5. 在单元格中输入完全相同的公式以查看它是否返回正确的数据 - 它确实如此。

    相同的公式和数据类型适用于所有其他条件。

【问题讨论】:

  • 我的猜测是 Vlookup 找不到匹配项。
  • 尝试使用 Application.WorksheetFunction.VLookup 而不是评估字符串;这将抛出一个可捕获的运行时错误,而不是返回一个 Variant/Error#N/A 错误结果。任何可能返回 Variant/Error 的东西都不应分配给 Variant 以外的任何东西;那么你可以使用If IsError(theReturnedVariant)来处理#N/A。或者,您可以使用后期绑定 Application.VLookup 来做同样的事情——无论哪种方式,Evaluate 都不合适。
  • 是否声明了这些变量?有类型吗?
  • 该错误意味着 Vlookup 没有找到匹配项。见this
  • @MathieuGuindon 就是这样!我在电子表格中通过名称引用了一个表,但没有明确地将其定义为宏中的范围对象。感谢您的帮助!

标签: excel vba vlookup type-mismatch


【解决方案1】:

它必须是名字。自己解决它们并向 VLOOKUP 传递一个实际的 Range 对象而不是名称:Excel 可以(确实)在将命名范围传递给函数之前解析命名范围,但 VBA 不知道它必须这样做并尝试向 VLOOKUP 传递您给它的名称,但 VLOOKUP 需要 Range 对象。

您可以通过检查后期绑定 VLookup 函数针对 CVErr(xlErrRef)(“error 2023”/#REF! 工作表错误的变体/错误值)返回的特定错误代码来验证是否确实如此。

如果该函数返回“错误 2042”/#N/A 工作表错误,您可以针对 CVErr(xlErrNA) 进行验证 - 这意味着查找无法找到它正在寻找的内容。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多