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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:50:17