Excel VBA女士:设置一个排序组合框

时间:2011-09-27 14:01:31

标签: excel vba excel-2010

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

我正在尝试使用三个选项在此工作表中插入一个组合,因此当您选择第一个时,它将根据列R和列S对所有表应用降序排序。如果选择第二个,则将根据列S和列R应用降序排序。如果选择第一个,它将根据列A应用降序排序。 将隐藏列S和列R. 我希望你们能帮助我。谢谢你,对不起我的英语。

1 个答案:

答案 0 :(得分:2)

为了给图片添加图片,我假设你有一张看起来像这样的excel表:

Initial ScreenShot of Worksbook

(在此示例中保持列S和R可见)

您想要添加一个组合框,该组合框将根据组合框中选择的值对列进行排序,如下所示:

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

首先,如果您还没有这样做,请添加Developer Tab to Excel

接下来,将表格中的单元格放入命名范围。如果此表中的行将更改,请确保创建dynamic named range。 (动态命名范围有点棘手,但对动态数据非常有用

通过单击开发人员选项卡中的插入添加组合框,然后从表单控件中选择组合框(注意: ActiveX组合框是一个完全不同类型的控件。你可以使用它得到相同的结果,但代码会有所不同。)

将组合框拖到工作表上的某个位置: Add combo box

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

Combo box values

返回表格和组合框所在的工作表。右键单击组合框并选择格式控制

enter image description here

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

再次右键单击组合框,然后选择指定宏。为宏指定名称并将宏放入此工作簿

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;请注意,它没有表的动态名称范围。