You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:56:08