【问题标题】:Excel VBA Match if value is null如果值为空,则 Excel VBA 匹配
【发布时间】:2018-03-08 17:53:07
【问题描述】:

我在一个较大的脚本中有一段代码,它只是根据匹配为“i”分配一个值。我的想法是如果找到输入的值,我希望它给出匹配值,否则为 0。如果它是 0,我可以退出 sub 并向用户发送消息。然而,任何时候匹配发现一个空值,它只是杀死子,而不是作为我介绍的 iferror 的一部分来处理它。我尝试了各种检查方式(例如使用 iif(iserror)),但似乎都不起作用。

导致问题的代码如下:

i = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Match(username, EL.Range("A:A"), 0), 0)

i 作为整数是暗淡的

用户名是暗淡的字符串,来自输入框

EL 作为一个工作表是暗淡的,并且包含正确的信息。

如果我引入任何存在的名称,这绝对没有问题,只有当我输入一个不起作用的名称时它才会失败,而且我有点不知道为什么。我认为它没有失败的理由,但我觉得我错过了一些简单而直接的东西。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    改用这个。使用 Application 而不是 WorksheetFunction 可以捕获和测试错误。

    i = Application.IfError(Application.Match(UserName, EL.Range("A:A"), 0), 0)
    

    【讨论】:

    • 我是正式的白痴。立即解决问题,非常感谢。
    • @JayC 如果 SJR 回答对你有帮助,那么你应该接受它作为“ANSWER”,点击他回答左侧的灰色复选标记,它会变成绿色
    • 我本来打算这样做,但不幸的是,由于您无法在提出问题的前 15 分钟内接受答案,所以我没想到。为提醒干杯
    【解决方案2】:

    我会使用稍微不同的方法来捕获Application.Match 函数上的错误:

    Dim i As Variant
    
    i = Application.Match(UserName, EL.Range("A:A"), 0)
    ' if Match wasn't able to found a "match"
    If IsError(i) Then i = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多