只是把一個圖片的話,我假設你有一個Excel工作表,看起來像這樣類似:

(保持柱S和R在這個例子中可見)
你想要添加一個組合框,將根據組合框中選擇的值對列進行排序,如下所示:
- Opt離子1:降序對R列,則S
- 選項2:降序對列S,則R
- 選項3:降序A列
第一件事,如果您還沒有這樣做,請添加Developer Tab to Excel。
接下來,將表格中的單元格放在命名範圍中。如果此表中的行將發生更改,請確保您創建了dynamic named range。 (動態指定範圍是有點棘手,但對於動態數據非常有用)
通過單擊插入從開發選項卡並選擇組合框從添加組合框表單控件(注:的的ActiveX組合框是一個完全不同類型的控制你可以用它來相同的結果,但代碼會有所不同)
將工作表上的組合框的地方:。 
現在將選項值添加到組合中。您應該在工作簿中的某個位置爲組合框添加值(例如Sheet2,單元格A1,A2 & 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;請注意,它沒有表格的動態名稱範圍。
來源
2011-09-27 17:22:32
ray
謝謝@ ray023這非常有幫助。還有一個問題。我想在一個模板中定義這個宏,以便第三方應用程序用不同數量的數據填充多張表單併爲表單設置個性化名稱。如果你不知道你得到了多少數據,你將如何處理數據範圍?您如何在同一工作簿中爲幾張紙做這項工作?再次感謝! – Jorge
我將不得不提出更多問題以給出完整答案。一般情況下,如果模式不改變(例如名爲「Customers」的工作表將始終存在且列不會更改),那麼您的預定義動態範圍應該可以工作。如果你想深入研究,你可以創建基於被導入的數據的動態範圍,但這更適合於一個新的問題而不是評論。另外,如果可能的話(我知道我們並不總是被賦予這種奢侈),我會考慮將數據放入數據庫(例如Access);更簡單的方法來維護數據。 – ray