我是VBA的新手,虽然我有一些Visual Basic的经验。 我有一个Microsoft Excel 2010工作表。第29行包含表格的标题,数据来自第30行,依此类推。这个表有20列。
我正在尝试使用三个选项在此工作表中插入一个组合,因此当您选择第一个时,它将根据列R和列S对所有表应用降序排序。如果选择第二个,则将根据列S和列R应用降序排序。如果选择第一个,它将根据列A应用降序排序。 将隐藏列S和列R. 我希望你们能帮助我。谢谢你,对不起我的英语。
答案 0 :(得分:2)
为了给图片添加图片,我假设你有一张看起来像这样的excel表:
(在此示例中保持列S和R可见)
您想要添加一个组合框,该组合框将根据组合框中选择的值对列进行排序,如下所示:
首先,如果您还没有这样做,请添加Developer Tab to Excel。
接下来,将表格中的单元格放入命名范围。如果此表中的行将更改,请确保创建dynamic named range。 (动态命名范围有点棘手,但对动态数据非常有用)
通过单击开发人员选项卡中的插入添加组合框,然后从表单控件中选择组合框(注意: ActiveX组合框是一个完全不同类型的控件。你可以使用它得到相同的结果,但代码会有所不同。)
将组合框拖到工作表上的某个位置:
现在将选项值添加到组合中。您应该在工作簿中的某个位置添加组合框的值(例如Sheet2,Cells A1,A2和amp; A3)。
返回表格和组合框所在的工作表。右键单击组合框并选择格式控制。
输入范围范围应该是包含排序选项的单元格。它看起来像这样: Sheet2!$ A $ 1:$ A $ 3
再次右键单击组合框,然后选择指定宏。为宏指定名称并将宏放入此工作簿
单击“新建”。您将进入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;请注意,它没有表的动态名称范围。