VBS中替换字符串数组内指定元素的实现方法
赋值不生效的核心原因
你直接执行strings(0) = "ggg"没生效,和Set关键字没有关系,本质是两个常见问题:
- 你初始化数组的写法有误:直接写
strings = ("asd","zxc","qwe","ert")在VB系(VBA/VB6/VBScript)语法里不会被识别为合法的数组赋值,括号会被解析为表达式优先级符号,最终strings没有被正确初始化为可修改的数组结构 - 如果你是直接修改函数/表达式返回的临时数组,修改的只是内存里的临时副本,没有把修改结果重新赋值给原变量,自然不会生效
关于Set关键字的误区
完全不需要用Set实现字符串替换。Set是专门给引用类型对象(比如工作表、文件流、类实例)赋值用的,字符串是基础值类型,直接用等号赋值即可,强行加Set反而会触发类型不匹配报错。
具体实现方法
不管是替换成静态字符串还是变量存储的字符串,都可以用下面两种方案:
方案1:正确初始化数组后直接按下标赋值(推荐)
先通过Array()函数正确初始化数组,之后直接通过下标赋值即可,同时支持静态值和变量值:
Dim strings As Variant ' 正确初始化数组 strings = Array("asd", "zxc", "qwe", "ert") ' 替换第一个元素为静态字符串 strings(0) = "ggg" ' 替换元素为变量存储的值 Dim myStr As String myStr = "testVal" strings(2) = myStr ' 执行后数组为("ggg", "zxc", "testVal", "ert")
注意:如果你在模块开头写了
Option Base 1,数组默认下标从1开始,第一个元素对应的下标是1而不是0。
方案2:数组拼接替换(适配只读/临时数组场景)
如果你拿到的数组是只读的、或者是其他函数返回的结果没法直接修改下标,可以把需要保留的元素和新值拼成新数组,重新赋值给原变量即可:
Dim strings As Variant strings = Array("asd", "zxc", "qwe", "ert") Dim newVal As String newVal = "ggg" ' 替换第0位元素,其余元素保留原值 strings = Array(newVal, strings(1), strings(2), strings(3)) ' 执行后得到目标结果:("ggg","zxc","qwe","ert")
如果数组长度比较大,不需要手写全量元素,可以先通过循环把原数组拷贝到临时数组,修改临时数组对应位置后再赋值回原变量即可。
内容的提问来源于stack exchange,提问作者Umbe Bagna
相关产品推荐
相关产品推荐

