我是復活節假期,感謝你的幫助我解決了這個問題後面,
它在過濾器中定義的表,基於列表中可用的列。它將數據保存在字典中,以便用戶將列添加到列表表單中並不重要。以下是其他人可能覺得有用的代碼。
Sub filterCreation()
Dim lColumn As Long
rowHeader = 2 ' HEader row in list sheet
rowHeader2 = 1 'header row in filter sheet
Set ws = ThisWorkbook.Sheets("List")
Set ws2 = ThisWorkbook.Sheets("Filter")
lColumn = ws.Cells(rowHeader, Columns.Count).End(xlToLeft).column
Set columnHeader = CreateObject("Scripting.Dictionary")
Set filterDict = CreateObject("Scripting.Dictionary")
Dim temp() As Variant
lRow = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
For i = rowHeader2 To lRow
lcolumn2 = ws2.Cells(i, Columns.Count).End(xlToLeft).column
If lcolumn2 > 1 Then
ReDim temp(lcolumn2 - 2)
For j = 2 To lcolumn2
temp(j - 2) = ws2.Cells(i, j)
Next j
Else
temp = Array(Empty)
End If
filterDict.Add CStr(ws2.Cells(i, 1).Value), temp
Next i
tempCol = ws2.Cells(1, Columns.Count).End(xlToLeft).column
ws2.Range(ws2.Cells(rowHeader2 + 1, 1), ws2.Cells(lRow, tempCol)).Clear
'Refill the sheet
For i = 1 To lColumn
'columnHeader.Add ws.Cells(rowHeader, i), ""
If filterDict.Exists(CStr(ws.Cells(rowHeader, i).Value)) Then
b = filterDict.Item(CStr(ws.Cells(rowHeader, i).Value))
For k = LBound(b) To UBound(b)
ws2.Cells(rowHeader2 + i, k + 2).Value = b(k)
Next k
End If
'column header to excel sheet
ws2.Cells(rowHeader2 + i, 1).Value = ws.Cells(rowHeader, i).Value
Next i
'Set columnHeader = Nothing
Set filterDict = Nothing
End Sub
另外我也會自動添加按鈕,列表表激活過濾器:
Sub CreateButtons()
'On Error Resume Next
Set ws2 = ThisWorkbook.Sheets("Filter")
Set ws1 = ThisWorkbook.Sheets("List")
For Each wShape In ws1.Shapes
wShape.Delete
Next wShape
rowHeader2 = 1
lcolumn2 = ws2.Cells(rowHeader2, Columns.Count).End(xlToLeft).column
tempName = "All"
ws1.Buttons.Add(20, 20, 81, 36).Name = tempName
ws1.Shapes(tempName).OnAction = "Unhide_All_Columns"
ws1.Shapes(tempName).Placement = xlFreeFloating
ws1.Shapes(tempName).Select
Selection.Characters.Text = "All"
tempName = "ShowGUI"
ws1.Buttons.Add(120, 20, 81, 36).Name = tempName
ws1.Shapes(tempName).OnAction = "loadGUI"
ws1.Shapes(tempName).Placement = xlFreeFloating
ws1.Shapes(tempName).Select
Selection.Characters.Text = "Show GUI"
For i = 2 To lcolumn2
tempName = CStr(ws2.Cells(rowHeader2, i).Value)
ws1.Buttons.Add(15 + i * 100, 20, 81, 36).Name = tempName
ws1.Shapes(tempName).OnAction = "Tester"
ws1.Shapes(tempName).Placement = xlFreeFloating
ws1.Shapes(tempName).Select
Selection.Characters.Text = tempName
'ws2.Shapes(tempName).Characters.Text = CStr(ws2.Cells(rowHeader2, i).Value)
Next i
End Sub
![Filter](https://i.stack.imgur.com/UopHa.png)
![List](https://i.stack.imgur.com/iELnc.png)
無論你的建議方案是好的。你期望從我們那裏聽到什麼? – 2015-03-19 11:36:59
如果帶註釋的想法是一個好主意,我該如何循環每個筆記並獲得筆記的價值? – skatun 2015-03-19 11:41:53
此網站是爲編程愛好者。我建議你嘗試一下,並針對你遇到的任何具體問題提出一個新問題。 – 2015-03-19 11:59:45