Сортировка нескольких листов с одинаковым диапазоном
Попытка сортировки нескольких листов, использование массива и, к сожалению, ошибка "Невозможно установить массив". Не уверен, что здесь делается неправильно. Вот мой код:
Sub Macro1()
Dim ws() As Variant
Dim wb As Workbook
Set wb = ThisWorkbook
Set ws() = wb.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
'
' Macro1 Macro
'
'
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange Range("A1:B6")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
2 ответа
Решение
Записанный синтаксис сортировки - это намного больше, чем вам нужно.
sub macro2()
dim w as long, lr as long, wss as variant
wss = Array("Sheet1", "Sheet2", "Sheet3")
for w = lbound(wss) to ubound(wss)
with thisworkbook.worksheets(wss(w))
lr = application.max(.cells(.rows.count, "a").end(xlup).row, _
.cells(.rows.count, "b").end(xlup).row)
with .range(.cells(1, "a"), .cells(lr, "b"))
.Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlNo
end with
end with
next w
end sub
Вы ссылаетесь на массив, где вы должны ссылаться на лист. Вы объявили ws
как вариант & эта переменная не имеет таких свойств, как .Sort
Обратите внимание, что массив можно использовать как ярлык для имени листа, а не как ярлык для .Sheets("")
объект.
Sub Macro1()
Dim ws() As Variant
Dim wb As Workbook
Set wb = ThisWorkbook
ws() = Array("Sheet1", "Sheet2", "Sheet3")
Dim i as Integer
For i = 0 To 2
wb.Sheets(ws(i)).Sort.SortFields.Clear
wb.Sheets(ws(i)).Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With wb.Sheets(ws(i)).Sort
.SetRange Range("A1:B6")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Next i
End Sub