Excel 如果表格范围中的单元格值等于;新";复制整行并将其作为值粘贴到第1页的下一个空单元格中

Excel 如果表格范围中的单元格值等于;新";复制整行并将其作为值粘贴到第1页的下一个空单元格中,excel,vba,if-statement,copy,copy-paste,Excel,Vba,If Statement,Copy,Copy Paste,我试着做一件基本的事情,但做不好 我想计算表列(OldNew)中表2(新花名册)上的单元格的值“New”。如果有值,复制整行并将其添加到第1页(当前花名册)的表(当前花名册)中 以下是我正在使用的代码: For Each c In wb.Names("OldNew").RefersToRange.Cells If c.Value Like "New" Then On Error Resume Next Set Sou

我试着做一件基本的事情,但做不好

我想计算表列(OldNew)中表2(新花名册)上的单元格的值“New”。如果有值,复制整行并将其添加到第1页(当前花名册)的表(当前花名册)中

以下是我正在使用的代码:

For Each c In wb.Names("OldNew").RefersToRange.Cells
    If c.Value Like "New" Then
        On Error Resume Next
        Set SourceTable = Worksheets("New Roster").ListObjects("NewRoster").DataBodyRange
        Set DestinationTable = Worksheets("Current Roster").ListObjects("CurrentRoster").ListRows.Add
        SourceTable.Copy
        DestinationTable.Range.PasteSpecial xlPasteValues
    End If
Next
这无休止地循环,不做我想做的事

以下是上下文的完整代码: 子表数据()

作为ListObject的Dim tbl 暗淡单元格作为范围 变暗rng As范围 将RangeName设置为字符串 将CellName设置为字符串 将wb作为工作簿,c作为范围,m 将ws1设置为工作表 变暗lr为长 作为ListObject的Dim lo 暗源表 暗淡的命运表

工作表(“新名册”)。激活 范围(“A1”)。选择

从一个表复制到另一个表
  • 删除重复的声明和引用
  • 只有当两个表的列数相同,并且表
    newfloster
    的列标题为
    OldNew
    时,这才有效
  • 它是一个独立的版本,所以您可以按原样进行测试。稍后,您只需删除添加的行
  • 如果要允许不区分大小写(允许新建、新建),可以在
    Instr
    函数中添加
    vbTextCompare
    作为第四个参数
  • 忘记错误时的
    继续下一步
    。大约:它通常(专门)在一(几)行上使用,并通过错误转到0上的
    或一些错误处理“结束”,例如
    如果出错,则
    ,其中将再次包含错误转到0上的
    或其他
    错误转到0上的
    语句。还有很多。您应该确切地知道为什么要使用它
代码

Sub copyFromTableToTable()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    With wb.Worksheets("New Roster").ListObjects("NewRoster")
        Dim c As Range
        Dim dest As Range
        Dim hRow As Long
        hRow = .HeaderRowRange.Row
        For Each c In .ListColumns("OldNew").DataBodyRange
            If InStr(1, c.Value, "New") > 0 Then
                With wb.Worksheets("Current Roster").ListObjects("CurrentRoster")
                    ' This doesn't work.
                    'Set dest = .ListRows.Add
                    .ListRows.Add
                    With .DataBodyRange
                        Set dest = .Rows(.Rows.Count)
                    End With
                End With
                dest.Value = .DataBodyRange.Rows(c.Row - hRow).Value
            End If
        Next c
    End With
End Sub

使用
Range.AutoFilter
可能更容易。如何解释找不到的值?没有“新”。。。?
Sub copyFromTableToTable()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    With wb.Worksheets("New Roster").ListObjects("NewRoster")
        Dim c As Range
        Dim dest As Range
        Dim hRow As Long
        hRow = .HeaderRowRange.Row
        For Each c In .ListColumns("OldNew").DataBodyRange
            If InStr(1, c.Value, "New") > 0 Then
                With wb.Worksheets("Current Roster").ListObjects("CurrentRoster")
                    ' This doesn't work.
                    'Set dest = .ListRows.Add
                    .ListRows.Add
                    With .DataBodyRange
                        Set dest = .Rows(.Rows.Count)
                    End With
                End With
                dest.Value = .DataBodyRange.Rows(c.Row - hRow).Value
            End If
        Next c
    End With
End Sub