Как автоматически копировать строки в новый лист VBA Excel - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь auto-copy ряд из master spreadsheet в другой spreadsheet.Это должно происходить, когда входное значение в master равно X.

Таким образом, если X введено в Column A в master, тогда auto-copy для разделения spreadsheet (назовем это X).В основном Sheet X всегда должен содержать точную копию всех rows в master, где Column A = X.

Я не уверен, повлияет ли это на auto-copy, но master sheet содержитscript, который скрывает / показывает Columns.Таким образом, если X введено в Column A в master sheet, тогда 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

1 Ответ

0 голосов
/ 10 октября 2018

Полагаю, вы начинаете очищать лист "X" из строки 2, чтобы сохранить заголовки

В этом случае вы можете очистить все строки листа "X" и вставить заголовки из листа "Master" обратно

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

Отредактировано для учета возможных скрытых столбцов "Мастер" листа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...