带()的Variant数组使用Split函数赋值失败的解决方案求助
解决方案
问题根源
你定义的arr1() As Variant是元素类型为Variant的动态数组,而Split函数返回的是元素类型为String的一维固定数组,VBA不支持直接将这两种不同类型的数组互相赋值,这就是赋值失败的核心原因。
可行解决步骤
因为必须保留arr1() As Variant的定义,且现有代码要求变量名带(),可以通过临时变量中转+数组重定义的方式实现:
- 先用Variant变量接收Split的结果
- 调整
arr1的大小以匹配临时数组的元素数量 - 逐个将临时数组的元素赋值到
arr1中
具体代码示例:
' 假设tmpString是你拼接好的目标文本 Dim tempArr As Variant tempArr = Split(tmpString, ":-:") ' 重新定义arr1的维度,匹配tempArr的上下界 ReDim arr1(LBound(tempArr) To UBound(tempArr)) ' 循环赋值,将Split返回的字符串元素存入Variant数组 Dim idx As Long For idx = LBound(tempArr) To UBound(tempArr) arr1(idx) = tempArr(idx) Next idx
补充说明
- 如果你需要保留
arr1原有的部分元素,可以改用ReDim Preserve(仅支持修改一维数组的最后维度,这里适用):ReDim Preserve arr1(LBound(tempArr) To UBound(tempArr)) - 这种方式既满足了现有代码对
arr1()格式的要求,也能正确接收Split的结果,同时保持了Variant数组的灵活性。
内容的提问来源于stack exchange,提问作者Hallvard Skrede
相关产品推荐
相关产品推荐

