2017-09-27 107 views
1

我在一个较大的脚本中有一段代码,它只是根据匹配为“i”分配一个值。这个想法是我希望它找到匹配的值,如果没有找到,则返回0。如果它是0,我可以通过消息退出sub给用户。然而,任何时候匹配找到一个空值,它只是杀死子,而不是它被作为我已经介绍的iferror的一部分处理。我已经尝试过各种检查方式(例如使用iif(iserror)),但似乎没有任何工作。如果值为空,Excel VBA匹配

代码造成的问题是下面:

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

我是灰暗的整数

用户名是暗淡作为字符串,以及来自一个输入框

EL是暗淡的工作表并包含正确的信息。

这是绝对没有问题,如果我介绍任何存在的名称,它只会失败,只要我输入一个名称不起作用,我有点为难。我认为没有理由让它失败,但我觉得我错过了一些简单的东西。

回答

2

改为使用它。使用Application而不是WorksheetFunction可以使错误被捕获和测试。

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

我正式白痴。立即解决了这个问题,非常感谢。 –

+1

@JayC如果SJR答案帮助了你,那么你应该接受它为“答案”,点击他答案左边的灰色复选标记,它会变成绿色 –

+1

我打算不幸的是,它不幸地滑了我的脑海因为在提出查询的前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