- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
15#
發表於 2013-3-2 21:12
| 只看該作者
回復 14# lifedidi
附檔中UserForm1的程式碼- Private Sub UserForm_Initialize() '表單初始化的程序
- Dim D As Object
- Set D = CreateObject("Scripting.Dictionary") '字典物件
- Sheet2.Range("b1").CurrentRegion.Offset(1) = "" '先清除舊資料
- With Sheet1
- .AutoFilterMode = False '取消自動篩選模式
- For Each A In .Range(.[A2], .[A2].End(xlDown))
- D(A.Value) = ""
- Next
- ComboBox1.List = D.KEYS '專案選項內容
- End With
- End Sub
- Private Sub ComboBox1_Change() '專案選項內容: 有改變
- With Sheet1
- .AutoFilterMode = False
- If ComboBox1.ListIndex > -1 Then
- ComboBox2資料
- .Range("a1").AutoFilter 1, ComboBox1 '自動篩選模式:第1欄的篩選準則為 ComboBox1的值
- Else '改變的內容不在List中
- .Range("a1").AutoFilter 1, "<>" '自動篩選模式:第1欄的篩選準則為不是空白欄
- ComboBox2.Clear
- End If
- 資料複製
- End With
- End Sub
- Private Sub ComboBox2_Change() '專案選項內容: 有改變
- If ComboBox2.ListIndex > -1 Then
- Sheet1.Range("a1").AutoFilter 2, ComboBox2 '自動篩選模式:第2欄的篩選準則為 ComboBox2的值
- Else
- Sheet1.Range("a1").AutoFilter 2, "<>" '自動篩選模式:第2欄的篩選準則為不是空白欄
- End If
- 資料複製
- End Sub
- Private Sub ComboBox2資料()
- Dim D As Object, A
- Set D = CreateObject("Scripting.Dictionary")
- With Sheet1
- For Each A In .Range(.[A2], .[A2].End(xlDown))
- If A.Value = ComboBox1 Then D(A.Offset(, 1).Value) = ""
- Next
- If D.Count > 1 Then
- With .Columns(.Columns.Count).EntireColumn 'Sheet1的最後一欄
- .Clear
- .Cells(1).Resize(D.Count, 1).Value = Application.WorksheetFunction.Transpose(D.KEYS)
- '*** 排序
- .Cells(1).Resize(D.Count, 1).Sort Key1:=.Cells(1), Order1:=xlAscending, Header:= _
- xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
- SortMethod:=xlStroke, DataOption1:=xlSortNormal
- '*******
- ComboBox2.List = .Cells(1).Resize(D.Count, 1).Value '工種選項內容
- .Clear
- End With
- Else
- A = D.KEYS
- ComboBox2.AddItem A(0)
- End If
- ComboBox2.Value = ComboBox2.List(0) '工種選項的值
- End With
- End Sub
- Private Sub 資料複製()
- Dim Rng As Range
- Sheet2.Range("b1").CurrentRegion = "" '先清除舊資料
- Sheet1.Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheet2.Range("b1")
- '複製:'自動篩選出的資料
- End Sub
- Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
- Sheet1.AutoFilterMode = False '表單關閉前取消自動篩選模式
- End Sub
複製代碼 |
|