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

VBA代码中workOrderId变量类型不匹配错误排查求助

问题分析与修复

错误原因

你声明workOrderId为字符串数组(Dim workOrderId() As String),但rstIn!work_order_id是单个短文本值,直接将单个值赋值给数组变量,必然触发「类型不匹配」错误。此外,后续代码中用workOrderId(i)也是错误逻辑——每个拆分的assigned_to条目对应同一个工单ID,根本不需要数组存储。

修复后的完整代码

Option Compare Database

Sub TransformTable()
    Dim dbs As DAO.Database
    Dim rstIn As DAO.Recordset
    Dim rstOut As DAO.Recordset
    Dim arrParms() As String
    Dim workOrderId As String ' 修改:从数组改为普通字符串
    Dim i As Long
    Set dbs = CurrentDb
    Set rstIn = dbs.OpenRecordset("teszt_in", dbOpenForwardOnly)
    Set rstOut = dbs.OpenRecordset("teszt_out", dbOpenDynaset)
    
    Do While Not rstIn.EOF
        If Not IsNull(rstIn!assigned_to) Then
            arrParms = Split(rstIn!assigned_to, ",")
            workOrderId = rstIn!work_order_id ' 现在赋值单个字符串,无类型问题
            
            For i = 0 To UBound(arrParms)
                rstOut.AddNew
                rstOut!ID = rstIn!ID
                rstOut!assigned_to = Trim(arrParms(i)) ' 新增:去除拆分后的值前后空格
                rstOut!work_order_id = workOrderId ' 直接使用单个工单ID,无需索引
                rstOut.Update
            Next i
        End If
        rstIn.MoveNext
    Loop
    
    rstIn.Close
    rstOut.Close
    Set rstIn = Nothing ' 新增:释放对象资源
    Set rstOut = Nothing
    Set dbs = Nothing
End Sub

关键修改点

  • 将workOrderId的声明从数组改为普通字符串,匹配工单ID的单个值类型
  • 移除workOrderId(i)的索引调用,直接使用workOrderId变量
  • 新增Trim(arrParms(i)),清理拆分后姓名前后的空格(比如原数据中的" Ed"、" Dexter"会变成"Ed"、"Dexter")
  • 新增对象资源释放代码,避免Access内存泄漏

内容的提问来源于stack exchange,提问作者csibicode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:05:04