使用If/Then语句检查数组是否含值时遇异常:无值报错、有值仍返回False
问题分析与解决
问题1:数组无值时触发错误
当myAry未正确初始化(比如动态数组未执行Redim,或传入Filter的是未赋值的Variant数组),或是Filter返回的数组处于Empty状态时,直接调用UBound会抛出错误。需要先判断数组有效性,再进行后续检查。
问题2:数组包含值却始终返回False
Filter函数默认使用二进制比较(vbBinaryCompare),严格区分大小写。如果数组元素是小写的otherphone,而搜索字符串是大写开头的Otherphone,就会匹配失败。另外要确保myAry中确实存在完全匹配的目标元素。
修正后的代码
Dim OtherPhoneAry As Variant Dim myAry(0 To 4) As String ' 示例:给数组添加一个匹配项 myAry(2) = "Otherphone" ' 处理Filter可能抛出的错误(如原数组无效) On Error Resume Next OtherPhoneAry = Filter(myAry, "Otherphone", True, vbTextCompare) On Error GoTo 0 ' 先验证数组有效性,再检查是否有匹配结果 If IsArray(OtherPhoneAry) And UBound(OtherPhoneAry) > -1 Then Call Paste_filtered_OtherPhone End If
关键改进点
- 加入
vbTextCompare参数:忽略大小写匹配,避免因大小写差异导致的匹配失败。 - 错误捕获:用
On Error Resume Next处理Filter可能出现的异常,之后恢复默认错误处理逻辑。 - 数组有效性校验:先判断
OtherPhoneAry是否为有效数组,再调用UBound,避免无意义的错误触发。
内容的提问来源于stack exchange,提问作者Smokestack
相关产品推荐
相关产品推荐

