我正在尝试按名字和姓氏对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
显然,其他代码相似,但是降序而不是升序。
答案 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
请注意,排序操作不需要选择任何内容。