代码之家  ›  专栏  ›  技术社区  ›  Chopin

如何将行自动复制到新工作表VBA Excel

  •  0
  • Chopin  · 技术社区  · 6 年前

    auto-copy 一排来自 master spreadsheet 电子表格 . 当 主人 X .

    所以如果 签订 Column A 主人 分开 电子表格 Sheet X 应始终包含所有 rows Column A = X .

    自动复制 master sheet 包含 script Columns . 所以如果 A列 母版纸 然后 Column B,C 会被隐藏起来 D,E,F 将显示。

    Master Sheet 包含此信息。但如果 只有 D、 E、F 将可见

    A B C D E F
    X     4 5 6
    Y 1 2 3 4 5
    X     1 2 3
    

    A D E F
    X 4 5 6
    X 1 2 3
    

    这就是我所尝试的

    Sub FilterAndCopy()
    Dim sht1 As Worksheet, sht2 As Worksheet
    
    Set sht1 = Sheets("Master")
    Set sht2 = Sheets("X")
    
    Intersect(sht2.UsedRange, sht2.Rows("2:" & Rows.Count)).ClearContents
    
    sht1.Cells(1, 1).CurrentRegion.AutoFilter
    sht1.Cells(1, 1).CurrentRegion.AutoFilter 1, "X"
    sht1.Cells(1, 1).CurrentRegion.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Copy sht2.Cells(2, 1)
    sht1.Cells(1, 1).CurrentRegion.AutoFilter
    
    End Sub
    

    但它返回一个错误:

    Microsoft Visual Basic
    Object variable with block variable not set
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   DisplayName    6 年前

    我猜您应该开始清除第2行的“X”表以保留标题

    如果是这种情况,您可以清除所有“X”工作表行,并从“主”工作表中粘贴标题

    Option Explicit
    
    Sub FilterAndCopy()
        Dim sht1 As Worksheet, sht2 As Worksheet
    
        Set sht1 = Sheets("Master")
        Set sht2 = Sheets("X")
    
        sht2.UsedRange.ClearContents
        Dim rng As Range
    
        With sht1.Cells(1, 1).CurrentRegion
            .AutoFilter
            .AutoFilter 1, "X"
            For Each rng In .SpecialCells(xlCellTypeVisible).Areas ' loop through visible cells "groups"
                rng.Copy sht2.Range(rng.Address) ' copy current group and paste it to 'sht2' (i.e. sheet "X") corresponding address
            Next
            .AutoFilter
        End With
    
        With sht2.UsedRange ' reference 'sht2' used range
            .Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' delete referenced sheet blank rows
            .Rows(1).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete ' delete referenced sheet blank columns
        End With
    End Sub
    

    编辑