Как настроить этот код, который сортирует один лист, чтобы сортировать несколько листов в книге - PullRequest
0 голосов
/ 19 июня 2020

Я запускаю макрос, который берет данные с одного листа и копирует их на несколько других листов. Я хочу настроить следующий код, чтобы я мог отсортировать ВСЕ листы в моей книге по столбцу Q после его копирования, а не только лист с именем «Сортировано1»

ActiveWorkbook.Worksheets("Sorted1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sorted1").Sort.SortFields.Add2 Key:=range("D2:D" & lastrow _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sorted1").Sort
.SetRange range("A1:Q" & lastrow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вы можете вызывать листы не только по их имени, но и по их положению в вашей книге.

sheets("sheet1") <- calls sheet named "sheet1"
sheets(1)        <- calls the first sheet 

Если вы хотите, чтобы ваш скрипт перебирал все листы, вы можете использовать for-l oop и замените имя листа итеративной переменной.

for i = 1 to x 'replace x with number of sheets
   ActiveWorkbook.Worksheets(i).sort (your script)...
   ....
Next

Если количество листов иногда меняется, используйте следующую команду вместо x для подсчета количества листов

Application.Sheets.Count

Итак:

for i = 1 to Application.Sheets.Count
   ActiveWorkbook.Worksheets(i).sort (your script)...
   ....
Next
0 голосов
/ 19 июня 2020

Попробуйте следующий код, пожалуйста:

Sub sortAllSheets()
 Dim sh As Worksheet, wb As Workbook, LastRow As Long
 Set wb = ActiveWorkbook
 For Each sh In wb.Worksheets
    'if all the columns have the same number of rows, this can be done for all the code
    LastRow = sh.Range("D" & Rows.Count).End(xlUp).row
    sh.Sort.SortFields.Clear
    sh.Sort.SortFields.Add2 key:=sh.Range("D2:D" & LastRow) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With sh.Sort
        .SetRange sh.Range("A1:Q" & LastRow) 'if LastRow is the same as in D:D
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...