使用DataObject.GetText()遇运行时错误13(类型不匹配)求助
解决VBA中DataObject.GetText()类型不匹配的问题
咱们先拆解下你遇到的运行时错误‘13’:类型不匹配的核心原因——GetText()方法需要接收的是多个独立的数值参数(比如起始位置、偏移量、长度这类整数参数),但你现在传入的是一个包含逗号的字符串(比如"0, 5, 14"),VBA没办法自动把这个字符串拆成方法需要的多个参数,自然就触发类型不匹配了。
具体的修复方案
这里给你两种可行的解决思路,你可以根据自己的代码场景选择:
思路1:拆分字符串参数,转成整数后传入
在循环里把每个Loc(L)的字符串按逗号拆分,去除空格后转成整数,再作为独立参数传给GetText():
Dim L as Integer, OldL as String Dim Loc(1 to 19) as String Loc(1) = "0, 5, 14": Loc(2) = "31, 5, 7": ' ... 补充其他数组元素 For L = 1 to 19 ' 按逗号拆分字符串,得到参数数组 Dim paramArray() as String paramArray = Split(Loc(L), ",") ' 去除每个参数的空格并转成整数,传入GetText ' 注意:要确保每个Loc元素都是3个逗号分隔的整数,否则需要加错误处理 OldL = Trim([Object].GetText( _ CInt(Trim(paramArray(0))), _ CInt(Trim(paramArray(1))), _ CInt(Trim(paramArray(2))) _ )) ' ... 后续处理逻辑 Next L
思路2:直接用数值数组存储参数(更稳妥)
如果可以提前调整数组的定义,建议直接用二维数组来存储每个参数的数值,避免字符串拆分的麻烦:
Dim L as Integer, OldL as String ' 定义二维数组,每行存3个整数参数 Dim Loc(1 to 19, 1 to 3) as Integer Loc(1, 1) = 0: Loc(1, 2) = 5: Loc(1, 3) = 14 Loc(2, 1) = 31: Loc(2, 2) = 5: Loc(2, 3) = 7 ' ... 补充其他行的参数 For L = 1 to 19 OldL = Trim([Object].GetText(Loc(L, 1), Loc(L, 2), Loc(L, 3))) ' ... 后续处理逻辑 Next L
额外提示
如果GetText()的参数数量不是固定3个,你需要根据实际方法的参数要求调整拆分或数组的结构;另外可以考虑加入错误处理(比如IsNumeric判断参数合法性),避免因字符串格式错误导致新的运行时错误。
内容的提问来源于stack exchange,提问作者user8934038
相关产品推荐
相关产品推荐

