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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:03