- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
15#
發表於 2013-9-4 10:24
| 只看該作者
本帖最後由 GBKEE 於 2013-9-4 10:36 編輯
回復 18# sillykin - Option Explicit
- Option Base 1 '<- 下限值為 1 ; 若要設下限值為 0,則 Option Base 陳述式是不需要的。
- Dim Ar(), Ax() '這模組中的程式可用之變數
- Private Sub UserForm_Initialize()
- Dim D(1 To 6) As Object, i As Integer, R As Variant
- '********如果SHEET1欄位值為A~D欄位及F欄位及G欄位..***
- Ar = Array(1, 2, 3, 4, 6, 7) '設定欄位
- '****************************************************
- Ax = Array(ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5, ComboBox6) 'ComboBox六個選項內容依序為 組別,姓名1....
- With Sheet1
- .AutoFilterMode = False '顯示全部資料 ->新的 多重篩選 才會確.
- For i = 1 To 6
- Set D(i) = CreateObject("Scripting.Dictionary")
- For Each R In .Range("A2", .[A2].End(xlDown))
- '************ 若預設的下限值為 0 -> i - 1 *******************************************************
- 'D(i)(R.Offset(, Ar(i - 1) - 1).Value) = "" 'i = 1 時 若預設的下限值為0 則需Ar(i - 1)-> Ar(0) = 1'*
- '*****************************************************************************************************
- D(i)(R.Offset(, Ar(i) - 1).Value) = ""
- Next
- Ax(i).List = Application.Transpose(D(i).keys)
- Next
- End With
- End Sub
- Private Sub CommandButton1_Click() '篩選條件
- Dim Rng As Range, i As Integer
- Application.ScreenUpdating = False
- Set Rng = ActiveSheet.Range("$A$1:$Q$300")
- Rng.Parent.AutoFilterMode = False '顯示全部資料 ->新的 多重篩選 才會確.
- For i = 1 To 6 '多重篩選 ..........
- '************ 若預設的下限值為 0 -> i - 1 *****************************************************
- 'If Ax(i - 1).Value <> "" Then Rng.AutoFilter Field:=Ar(i - 1), Criteria1:=Ax(i - 1).Value & "*" '*
- '***************************************************************************************************
- If Ax(i).Value <> "" Then Rng.AutoFilter Field:=Ar(i), Criteria1:=IIf(i <> 5, Ax(i).Value & "*", Ax(i).Value)
- '元(F欗)為數值不可用 * 來篩選
- Next
- Application.ScreenUpdating = True
- End Sub
- Private Sub CommandButton4_Click()
- With ActiveSheet.Range("$A$1:$Q$300") '範圍
- .Parent.AutoFilterMode = False '顯示全部資料 ->取消 多重篩選
- End With
- End Sub
複製代碼 |
|