найдено 'TargetTable.Range.SpecialCells (xlCellTypeVisible) .Copy _' Назначение: = Sheets ("Sheet8"). Range ("A1") - PullRequest
0 голосов
/ 05 мая 2018

У меня есть лист с именем "Staffdb" с двумя именованными таблицами "PermTBL" и "StaffTBL", одинаковыми заголовками "Girls", ID "" Hire_date "и" Status ". Весь нынешний и исторический персонал находится в Перми. Я хотел бы отфильтровать PermTBL в поле «Состояние» для «A», что означает «активный», а затем скопировать их в StaffTBL, который является пустым. После ручной фильтрации PermTBL со стрелкой вниз Status и выбора только «A» я иду, чтобы проверить код и получить очевидную частичную копию. Мой код Опция Явная

Sub PermTBLtoStaffTBL ()

Dim rgnsrc As Range Dim rgndest As Range

Set rgnsrc = Worksheets("Staffdb").Range("PermTBL")
Set rgndest = Worksheets("Staffdb").Range("StaffTBL")
rgnsrc.SpecialCells(xlCellTypeVisible).Copy rgndest

End Sub

Наконец, в качестве дополнительной части информации StaffTBL, кажется, имеет скрытые строки, 3-7 не видны, что соответствует моим пропущенным данным. Я пытался показать, но безрезультатно. Предложения о том, куда идти дальше? Должен ли я перебрать таблицу или я сделал ошибку в пункте назначения? Новое в этом, скорость интернета в 3-м мире, а также невозможность доставить книги делают этот процесс утомительным. Пожалуйста, терпите NewBee.

Новая часть информации, я обнаружил, что если я раскрою весь лист, в StaffTBL появятся правильные данные, конечно, фильтр PermTBL также исчезнет, ​​так что, очевидно, я был на правильном пути. Хотелось бы еще комментарии и предложения по программной (в отличие от ручной) фильтрации PermTBL. Я буду продолжать поиск сайтов для этого, но любые предложения приветствуются.

1 Ответ

0 голосов
/ 05 мая 2018
Sub CopyData()

    Dim t As ListObject
    Dim t2 As ListObject

    Set t = ActiveSheet.ListObjects("PermTBL")
    Set t2 = ActiveSheet.ListObjects("StaffTBL")

    ' Remove all rows from StaffTBL table
    If Not t2.DataBodyRange Is Nothing Then
        t2.DataBodyRange.Rows.Delete
    End If

    ' Filter Status by "A"
    t.DataBodyRange.AutoFilter Field:=4, Criteria1:="A"
    ' Copy to first cell right below the table's header
    t.DataBodyRange.Copy t2.Range(1).Offset(1)
    ' Remove filter from PermTBL table
    t.DataBodyRange.AutoFilter

End Sub

UPDATE

Пример рабочей книги

...