Проблемы в VBA ".Apply" - PullRequest
0 голосов
/ 27 июня 2018

Попытка создать макрос динамической сортировки, работает с первым столбцом, затем я получаю сообщение об ошибке при попытке запустить новый столбец (при попытке отсортировать каждый столбец A-Z без изменения порядка других столбцов).

Sub SortCell()
Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = ActiveSheet
Set StartCell = ActiveCell

ActiveCell.Columns("A:A").EntireColumn.Select
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:= _
    ActiveCell, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveSheet.Sort
    .SetRange ActiveCell.Range(StartCell, sht.Cells(LastRow, LastColumn))
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply

End With
MsgBox "Action complete.", vbInformation
End Sub

1 Ответ

0 голосов
/ 27 июня 2018

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

dim c as long

with activesheet
    for c=1 to .cells(1, .columns.count).end(xltoleft).column
        if .cells(.rows.count, c).end(xlup).row >1 then
            with .columns(c).Cells
                .Sort Key1:=.cells(1), Order1:=xlAscending, _
                      Orientation:=xlTopToBottom, Header:=xlNo
            end with
        end if
    next c
end with
...