Как назначить разные макросы для каждой командной кнопки в верхней части каждого столбца, чтобы они работали независимо от других макросов?

Я назначил следующий макрос первому столбцу своей электронной таблицы, чтобы отсортировать информацию в порядке возрастания и убывания. Этот макрос назначен командной кнопке и работает.

If CommandButton1.Caption = "Click to Sort Ascending" Then

'Sort ascending...
    ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Add Key:=Range("A2:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("daily data drop").Sort
        .SetRange Range("A2:Z308")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
CommandButton1.Caption = "Click to Sort Decending"

Else

'sort decending
    ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Add Key:=Range("A2:A308") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("daily data drop").Sort
        .SetRange Range("A1:Z308")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

CommandButton1.Caption = "Click to Sort Ascending"

End Sub

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

1 ответ

Не стоит размещать кнопку в каждом столбце. Я предложу метод, который вообще не нуждается в кнопках. Более того, вы всегда должны избегать дублирования больших частей вашего кода, где только один или два оператора различаются в зависимости от какого-либо параметра. Вы всегда должны стараться "разложить" ваш код и максимально сократить его, что делает его более читаемым и обслуживаемым.

Возможный способ достижения вашей цели состоит в том, что пользователь "дважды щелкает" по ячейке заголовка и сортирует данные по столбцу, по которому щелкнули. И после каждой сортировки порядок сортировки меняется на противоположный.

Вы можете сделать это, добавив следующий обработчик в модуль кода вашего рабочего листа. "daily data drop":

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Static descending As Boolean
    If Target.Row <> 1 Then Exit Sub
    Cancel = True
    Me.UsedRange.Sort Target, IIf(descending, xlDescending, xlAscending), Header:=xlYes
    descending = Not descending
End Sub
Другие вопросы по тегам