Сортировка всех таблиц на листе - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно отсортировать каждую таблицу на рабочем листе по тем же критериям. Я использую приведенный ниже код, но он застревает в строке 3

Dim tbl As ListObject

For Each tbl In Sheets("Back Table").ListObjects

With Sheets("Back Table").ListObjects(tbl)
    .Sort.SortFields.Clear
    .Sort.SortFields.Add2 Key:=Range(tbl & "[Home]"), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add2 Key:=Range(tbl & "[ID]"), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
End With

Next tbl

. Любая помощь будет признательна.

1 Ответ

3 голосов
/ 31 марта 2020

Ваш for each проходит по всем таблицам (ListObjects), на каждой итерации ваша переменная tbl будет содержать одну из таблиц - именно то, что вам нужно.

Ваше следующее утверждение (With ...) имеет недостатки. ListObjects - это Collection, и вы получаете доступ к члену Collection либо по порядковому номеру , либо по имени - не по объекту.

Вы можете изменить строку на With Sheets("Back Table").ListObjects(tbl.name) - но это совершенно не нужно, поскольку это снова вернет объект, который у вас уже есть в tbl. Вместо этого просто измените строку на With tbl

Обновление: я не хотел украсть ответ HTH, данный в комментариях - когда я читал комментарии, я просто читал довольно бесполезную дискуссию о On Error, что тем временем (к счастью) удаляется.

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