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
相关产品推荐
相关产品推荐

