Excel VBA女士:设置一个sortingcombobox

我是新来的VBA,虽然我有一些在Visual Basic的经验。 我有一个Microsoft Excel 2010工作表。 第29行具有表格的标题,数据来自第30行,依此类推。 这个表有20列。

我试图在这个工作表中插入一个组合,有三个选项,所以当你select第一个时,它会根据列R和列S对所有表应用降序sorting。如果你select第二个,它将应用降序按照S列和R列进行sorting。如果select第一个,则按列A进行降序sorting。列S和列R将被隐藏。 我希望你们能帮助我。 谢谢你,我的英语很抱歉。

只要把图片放在单词上,我假设你有一张类似于以下的excel表格:

工作簿初始屏幕截图

(保持列S和R对于这个例子是可见的)

你想添加一个combobox,将根据在combobox中select的值对列进行sorting,如下所示:

  • 选项1 :在列R,然后按S降序排列
  • 选项2 :按S列降序,然后按R
  • 选项3 :按A栏降序排列

首先,如果您还没有这样做,那么将Developer Tab添加到Excel中 。

接下来,将表格中的单元格放在命名范围内。 如果此表中的行将发生更改,请确保您创build了一个dynamic命名范围 。 ( dynamic命名范围有点棘手,但对于dynamic数据非常有用

添加combobox,方法是从“ 开发人员”选项卡中单击“插入”,然后从“ 表单控件”中selectcombobox( 注意: ActiveXcombobox是完全不同的控件types,可以使用相同的结果,但代码会有所不同。

在工作表上的某处拖动combobox: 添加组合框

现在将选项值添加到组合。 您应该在工作簿中的某个位置添加combobox的值(例如Sheet2,单元格A1,A2和A3)。

组合框值

返回表格和combobox所在的工作表。 用鼠标右键单击combobox,然后select格式控制

在这里输入图像说明

input范围的范围应该是包含你的sorting选项的单元格。 它看起来像这样: Sheet2!$ A $ 1:$ A $ 3

再次右键单击combobox,然后select分配macros 。 给macros指定一个名字,并把macros写入这个工作簿

宏

点击新build。 您将被带到Visual Basic编辑器。

在这里你可以应用你的sorting代码:

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 

你现在应该好好去。 如果你需要一个工作的例子,看看我在这里创build的示例表; 请注意,它没有表格的dynamic名称范围。