VBA执行Erase清空Variant数组时报类型不匹配错误如何解决
问题根因说明
- 未赋值的
Variant类型变量初始值为Empty,不属于数组类型,Erase语句仅支持作用于数组对象,首次执行直接调用Erase就会触发类型不匹配错误 - 直接用
变量 <> Empty判断数组是否存在的逻辑不成立:当Variant已经存储数组时,无法直接和Empty做等值比较,会直接触发类型不匹配错误 - 额外注意:不要用
array作为变量名,Array是VBA内置函数,保留字用作变量名会引发不可预期的错误
可行解决方案
方案1:保留清空逻辑,调整判断条件
用VBA内置的IsArray()函数判断变量是否已经是数组类型,只有确认是数组后再执行Erase操作,示例代码如下:
Dim arr As Variant ' 仅当变量已经是数组时执行清空操作 If IsArray(arr) Then Erase arr End If arr = ws.Range("a1:z1000").Value
方案2:直接省略Erase操作(更简便)
你声明的是Variant类型变量,直接给它赋值新的单元格区域时,VBA会自动释放旧的数组内存并绑定新的数组内容,完全不需要提前手动清空,循环内重复赋值也不会有残留问题,直接写以下代码即可正常运行:
Dim arr As Variant arr = ws.Range("a1:z1000").Value
内容的提问来源于stack exchange,提问作者ah2Bwise
相关产品推荐
相关产品推荐

