创建具有多个功能的宏按钮?

时间:2017-12-29 01:39:47

标签: excel vba excel-vba sorting

我正在尝试按名字和姓氏对excel表格进行排序,我想知道是否可以将多个宏分配给一个按钮?让我们说我点击一次,它按名字排序;再次单击并按姓氏排序。这可能吗?我问道,因为我找不到类似的问题。

这是我的代码

名字

        Columns ("D:D").Select 
        ActiveWorkbook.Worksheets(Sheet1") .Sort.SortFields.clear
    ActiveWorkbook.Worksheets(Sheet1") .Sort.SortFields.Add Key:=Range("D1"), 
    Sorton::x=SortOnValues, Order:=xlDesending, DataOption:=xlSortNormal
    with ActiveWorkbook.Worksheets("sheet1") .Sort
    .SetRange Range("A1:K505")
    Header = X1No
    .MatchCase = False
    .Orientation = x1TopToBottom 
    .SortMethod = x1PinYin 
    .Apply

    End With
    ActiveWindow.SmallScroll Down:=-495

    End Sub

显然,其他代码相似,但是降序而不是升序。

2 个答案:

答案 0 :(得分:2)

您可以为状态设置一个全局变量,并将其切换为使绑定到该按钮的宏执行不同的操作。 (假设您希望按钮的功能在每次点击后切换)

' global state variable
Dim State As Boolean

Private Sub Workbook_Open()
    ' initialize state
    State = True
End Sub

Sub mymacro()
    If State Then
        ' do stuff 1
    Else
        ' do stuff 2
    End If

    ' toggle state
    State = Not State
End Sub

答案 1 :(得分:0)

一个按钮只能运行一个宏。但是,您可以根据当前选择让宏执行不同的操作。例如,如果用户选择Name列中的单元格,则按名称按升序排序,如果选择位于另一列中,则按第一个名称降序排列。< / p>

以下代码设置排序键和相对于选择的排序顺序。因此,您不需要两个不同的宏。

Sub SortByColumn()

    Dim Ws As Worksheet
    Dim Clm As Long
    Dim SortOrder As XlSortOrder

    With Selection
        Set Ws = .Worksheet
        Clm = .Column
        If Clm = 4 Then             ' column #4 = column D
            SortOrder = xlDescending
        Else
            ' sort on column 1 by default
            Clm = 1                 ' column #1 = column A
            SortOrder = xlAscending
        End If
    End With

    With Ws.Sort
        With .SortFields
            .Clear
            .Add Key:=Ws.Cells(1, Clm), _
                 Sorton:=xlSortOnValues, _
                 Order:=SortOrder, _
                 DataOption:=xlSortNormal
        End With

        .SetRange Ws.Range("A1:K505")
        .Header = X1No
        .MatchCase = False
        .Orientation = x1TopToBottom
        .SortMethod = x1PinYin
        .Apply
    End With

    ActiveWindow.SmallScroll Down:=-495
End Sub

请注意,排序操作不需要选择任何内容。