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

问题描述 投票:0回答:2

我试图按名字和名字排序我的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

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

excel vba excel-vba sorting
2个回答
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

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.