Как назначить разные макросы для каждой командной кнопки в верхней части каждого столбца, чтобы они работали независимо от других макросов?
Я назначил следующий макрос первому столбцу своей электронной таблицы, чтобы отсортировать информацию в порядке возрастания и убывания. Этот макрос назначен командной кнопке и работает.
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