只是把图片变成文字,我假设你有一个看起来像这样的 excel 表:
(在此示例中保持列 S 和 R 可见)
您想要添加一个组合框,该组合框将根据组合框中选择的值对列进行排序,如下所示:
-
选项 1:按 R 列降序排序,然后按 S 列排序
-
选项 2:按 S 列降序排序,然后按 R 列排序
-
选项 3:按 A 列降序排序。
首先,如果您还没有这样做,请添加Developer Tab to Excel。
接下来,将表格中的单元格放入命名范围。如果此表中的行将更改,请确保创建一个 dynamic named range。 (动态命名范围有点棘手,但对动态数据非常有用)
通过单击开发人员选项卡中的“插入”添加组合框,然后从表单控件中选择组合框(注意:ActiveX 组合框是完全不同类型的控件。使用它可以得到相同的结果,但代码会有所不同。)
将组合框拖到工作表的某处:
现在将选项值添加到组合中。您应该在工作簿中的某个位置添加组合框的值(例如 Sheet2、单元格 A1、A2 和 A3)。
返回表格和组合框所在的工作表。右键单击组合框并选择Format Control。
输入范围范围应该是包含排序选项的单元格。它看起来像这样:Sheet2!$A$1:$A$3
再次右键单击组合框并选择Assign Macro。为宏命名并将宏放入此工作簿
单击新建。您将被带到 Visual Basic 编辑器。
您可以在此处应用您的排序代码:
Option Explicit
Sub DropDown2_Change()
Dim comboValue As String
Dim Key1ColumnIndex As Integer
Dim Key2ColumnIndex As Integer
'You can get the name by doing something like this in the immediate window: "? Sheet1.Shapes(1).OLEFormat.Object.Name"
comboValue = Sheet1.Shapes("Drop Down 2").ControlFormat.List(Sheet1.Shapes("Drop Down 2").ControlFormat.ListIndex)
Select Case comboValue
Case "Option1"
Key1ColumnIndex = 18
Key2ColumnIndex = 19
Case "Option2"
Key1ColumnIndex = 19
Key2ColumnIndex = 18
Case "Option3"
Key1ColumnIndex = 1
Key2ColumnIndex = 1
End Select
Range("DataValues").Sort Key1:=Range("DataValues").Cells(1, Key1ColumnIndex), _
Order1:=xlDescending, Header:=xlNo, DataOption1:=xlSortNormal, _
Key2:=Range("DataValues").Cells(1, Key2ColumnIndex), order2:=xlDescending
End Sub
您现在应该可以开始了。如果您需要一个工作示例,请查看我创建的示例表here;请注意,它没有表的动态名称范围。