【问题标题】:how to auto-copy rows to new sheet VBA Excel如何将行自动复制到新工作表 VBA Excel
【发布时间】:2018-10-10 04:34:53
【问题描述】:

我正在尝试从master spreadsheet 到另一个spreadsheetauto-copy。这应该在master 中的输入值等于X 时发生。

所以如果Xmaster中输入了Column A,那么auto-copy就将spreadsheet分隔开(姑且称之为X)。基本上Sheet X 应该始终包含master 中所有rows 的精确副本,其中Column A = X

我不确定这是否会影响auto-copy,但master sheet 包含一个隐藏/取消隐藏Columnsscript。因此,如果在master sheet 中将X 输入Column A,则Column B,C 将被隐藏,D,E,F 将被显示。

我正在尝试实现的示例如下所示:

Master Sheet 包含此信息。但是如果将X 输入到Column A 中,则只有D,E,F 可见

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

X 表:

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

【问题讨论】:

  • 如果Intersect 返回Nothing,那么.ClearContents 调用的对象引用是什么?

标签: excel vba copy spreadsheet


【解决方案1】:

我猜你开始从第 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

已编辑以说明可能的“主”工作表隐藏列

【讨论】:

  • 如果master 工作表包含一个script,它会根据column A 中输入的特定值隐藏/取消隐藏列,这是否重要?您的代码返回错误:That command cannot be used on multiple selections
  • 第一行。 Sub FilterAndCopy()
  • 这不可能。当您遇到错误时,单击“调试”按钮,您将被带到以黄色或蓝色突出显示的违规行
  • 所以从那时起,按 F8 单步执行您的代码,直到到达实际的违规行
  • 对不起。它在 .SpecialCells 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多