Word VBA复制指定表格行至汇总表时遇运行时错误5941
Word VBA:解决表格复制时的Run-Time Error '5941'
问题描述
执行VBA代码时触发Run-Time Error '5941': 请求的集合成员不存在,核心需求明确:
- 排除文档前2个、最后2个表格,将剩余所有表格的第2行复制到最后一个汇总表格中
- 复制规则:第3个表格的第2行对应汇总表第2行,第4个表格的第2行对应汇总表第3行,以此类推
原代码问题分析
原代码的核心错误在于直接访问汇总表中不存在的行:
ActiveDocument.Tables(TableCount).Rows(t - 1).Range.Paste
如果汇总表初始只有1行表头,当t=3时,t-1=2,此时汇总表并没有第2行,直接访问就会触发5941错误。此外,代码未对表格对象做安全引用,增加了出错概率。
修正后的代码方案
方案1:提前插入足够空行(适合已知数据量的场景)
Sub CopyTblsRow2ToTable() Dim t As Long Dim TableCount As Long Dim summaryTbl As Table TableCount = ActiveDocument.Tables.Count '绑定汇总表对象,减少重复调用 Set summaryTbl = ActiveDocument.Tables(TableCount) '计算需要插入的空行数:需处理的表格数 = (TableCount-2) - 3 + 1 = TableCount - 4 Dim requiredRows As Long requiredRows = TableCount - 4 '如果汇总表现有行数不足(表头+数据行),补充空行 If summaryTbl.Rows.Count < (requiredRows + 1) Then summaryTbl.Rows.Add Count:=requiredRows End If '循环复制目标行 For t = 3 To TableCount - 2 '复制源表格第2行 ActiveDocument.Tables(t).Rows(2).Range.Copy '粘贴到汇总表对应行,保留原格式 summaryTbl.Rows(t - 1).Range.PasteAndFormat wdFormatOriginalFormatting Next t End Sub
方案2:动态添加行(适合未知数据量的场景)
Sub CopyTblsRow2ToTable() Dim t As Long Dim TableCount As Long Dim summaryTbl As Table Dim newRow As Row TableCount = ActiveDocument.Tables.Count Set summaryTbl = ActiveDocument.Tables(TableCount) For t = 3 To TableCount - 2 '在汇总表末尾插入新行(作为下一行数据) Set newRow = summaryTbl.Rows.Add() '复制源表格第2行内容并粘贴到新行 ActiveDocument.Tables(t).Rows(2).Range.Copy newRow.Range.PasteAndFormat wdFormatOriginalFormatting Next t End Sub
关键修复点
- 确保目标行存在:通过提前插入空行或动态添加行,避免访问汇总表中不存在的行,从根源解决5941错误
- 对象绑定优化:将汇总表赋值给变量,减少重复调用
ActiveDocument.Tables(TableCount),提升代码效率和稳定性 - 格式控制:使用
PasteAndFormat替代直接Paste,确保复制的行保留原表格格式
内容的提问来源于stack exchange,提问作者Shelli G
相关产品推荐
相关产品推荐

