我想創建一個Excel表格文件,多選擇的列表框:Excel宏顯示一個多選列表框中的所有選項
item1
item2
item3
item4
...
..
,然後當我選擇爲例item1
和item3
從列表框中選擇的項目被填充上顯示另一個小區作爲
item1 - item 2 are selected
,我試圖是創建多選列表框將溶液和我附宏,然後我試圖環上列表框顯示選擇的項目到一個單元但是我不知道寫宏,我不是Excel的專家,我需要這樣做。
在此先感謝
我想創建一個Excel表格文件,多選擇的列表框:Excel宏顯示一個多選列表框中的所有選項
item1
item2
item3
item4
...
..
,然後當我選擇爲例item1
和item3
從列表框中選擇的項目被填充上顯示另一個小區作爲
item1 - item 2 are selected
,我試圖是創建多選列表框將溶液和我附宏,然後我試圖環上列表框顯示選擇的項目到一個單元但是我不知道寫宏,我不是Excel的專家,我需要這樣做。
在此先感謝
這應該工作鑑於您開始與新鮮沒有項目選定列表框。我選擇添加和刪除已經創建的字符串中的項目,而不是爲了性能原因而循環每個對象的每個選擇/取消選擇。這是一個選擇,但這應該運行得更順暢。但是,如果您已經在列表框中選擇了項目,那麼在您取消選擇然後重新選擇它們之前,這些項目不會對它們進行解釋。
此選項和每次循環所有值之間的另一個區別在於,使用此方法時,它會按選擇對象的順序添加選擇項/值,與它們在列表框中的順序相反,是正負或無動於衷你的目的,但想通我要補充一點英寸
Private Sub ListBox1_Change()
Dim lngCurrentItem As Long
Dim strCurrentItem As String
Dim strAllSelectedItems As String
Dim rngOutput As Range
Set rngOutput = [J1]
lngCurrentItem = ListBox1.ListIndex
strAllSelectedItems = rngOutput
strAllSelectedItems = Replace(strAllSelectedItems, " Are Selected", "")
strAllSelectedItems = Replace(strAllSelectedItems, " Is Selected", "")
strCurrentItem = ListBox1.List(lngCurrentItem)
If ListBox1.Selected(lngCurrentItem) Then
If strAllSelectedItems = "No Items Selected" Then
rngOutput = strCurrentItem & " Is Selected"
Else
rngOutput = strAllSelectedItems & " - " & strCurrentItem & " Are Selected"
End If
Else
strAllSelectedItems = Replace(strAllSelectedItems, " - " & strCurrentItem, "")
strAllSelectedItems = Replace(strAllSelectedItems, strCurrentItem, "")
If strAllSelectedItems = "" Then
rngOutput = "No Items Selected"
ElseIf InStr(1, strAllSelectedItems, " - ", vbTextCompare) > 0 Then
rngOutput = strAllSelectedItems & " Are Selected"
Else
rngOutput = strAllSelectedItems & " Is Selected"
End If
End If
End Sub
如果您想每一次循環整個列表(如果您列表框的話,你就不會真正注意到小很大程度上是速度上的差異,只要確保你的列表框沒有像100多個單元格的整個列一樣設置就可以了)
Private Sub ListBox1_Change()
Dim lngCurrentItem As Long
Dim strCurrentItem As String
Dim strAllSelectedItems As String
Dim rngOutput As Range
Set rngOutput = [J1]
strAllSelectedItems = ""
For i = 0 To ListBox1.ListCount - 1
strCurrentItem = ListBox1.List(i)
If ListBox1.Selected(i) Then
If strAllSelectedItems = "" Then
strAllSelectedItems = strCurrentItem
Else
strAllSelectedItems = strAllSelectedItems & " - " & strCurrentItem
End If
End If
Next i
If strAllSelectedItems = "" Then
rngOutput = "No Items Selected"
ElseIf InStr(1, strAllSelectedItems, " - ", vbTextCompare) > 0 Then
rngOutput = strAllSelectedItems & " Are Selected"
Else
rngOutput = strAllSelectedItems & " Is Selected"
End If
End Sub
謝謝,對不起還有一件事我必須將宏指定給列表框,就是這樣嗎? – molwiko
@Molwiko YEs並將'Set rngOutput = [J1]'中的* J1 *更改爲您希望輸出的單元格地址 – user2140261
當我嘗試運行您的代碼時,我的知識受限VB中停止For For = 0到ListBox1.ListCount - 1,我認爲,因爲listBox1它不是正確的參考,如何給一個列表框的名稱,並把正確的參考代碼? – molwiko
詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist),換句話說,我們需要看看你已經嘗試過,爲什麼它沒有工作。 – user2140261
我試過的解決方案是創建多選列表框,我附加了一個宏,然後我嘗試將列表框顯示選定的項目循環到一個單元格,但我不知道寫宏,我不是Excel專家我需要這樣做。 – molwiko