Excel VBA按条件追加行:子表含nonconformity行追加主表错误排查
错误原因排查
- 行号对应逻辑错误:循环变量
i是结构化表格TAB1的行索引,而你判断条件里用Cells(i, 4)取的是工作表的绝对行号,只要TAB1不是从工作表第1行开始(绝大多数情况表格都会有表头、前置空行),判断的单元格就和当前遍历的表格行完全不匹配,导致筛选逻辑完全失效。 - 匹配规则不符合需求:你要求的是第4列包含
nonconformity,但原代码用=做完全匹配,只要单元格内有其他内容就会出现漏匹配或者错匹配的情况。 - 变量声明不规范:
Dim i, iLastRow As Integer写法中只有iLastRow是Integer类型,i默认是Variant类型,且Integer最大支持32767行,数据量超过就会溢出。 - 语法错误:代码末尾的
End If没有对应的If开头,运行会直接报错。
正确实现逻辑
直接遍历结构化表格的每一行,取当前行的第4列值做模糊匹配,匹配成功后再复制行内容粘贴到主文件表格中,避免工作表行号和表格行索引的混用问题。
修正后可运行代码
' 统一声明变量为Long,避免溢出问题 Dim i As Long, iLastRow As Long Dim oLastRow As ListRow Dim srcRow As Range ' 获取子表TAB1的总行数 iLastRow = wkUP.Sheets("DATA").ListObjects("TAB1").ListRows.Count For i = 1 To iLastRow ' 直接取当前表格行的第4列值做包含匹配,如果需要完全匹配把Like语句换成=即可 If wkUP.Sheets("DATA").ListObjects("TAB1").ListRows(i).Range.Cells(1, 4).Value Like "*nonconformity*" Then Set srcRow = wkUP.Sheets("DATA").ListObjects("TAB1").ListRows(i).Range Set oLastRow = wkDW.Worksheets("NC").ListObjects("tbl_NC").ListRows.Add srcRow.Copy ' 从目标行第9列开始粘贴值,保留原有业务逻辑 oLastRow.Range.Cells(9).PasteSpecial Paste:=xlPasteValues ' 清除剪贴板,避免残留粘贴提示 Application.CutCopyMode = False End If Next
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

