如何为每列的顶部的每个命令button分配不同的macros,以使它们独立于其他macros工作?

我已将以下macros分配给电子表格的第一列,以按升序和降序对信息进行sorting。 这个macros被分配给命令button并工作。

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 

我想每个列的所有顶部标题有一个button,像上面的macros一样升序和降序,以保持行数据匹配。 任何人都可以帮助我,或者有一个可能有用的模板。

在每列上放置一个button并不是一个好主意。 我会build议一个不需要button的方法。 此外,你应该总是避免重复你的代码的大部分,其中只有一个或两个语句根据某些参数不同。 你应该总是试图“分解”你的代码,并尽可能地缩短它,这使得它更具可读性和可维护性。

实现您的目标的一种可能的方法是,用户在标题单元上“双击”并使数据按被点击的列进行sorting。 在每次sorting之后,sorting顺序都是相反的。

您可以通过将以下处理程序添加到工作表的"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