2013-10-09 63 views
0

我想創建一個Excel表格文件,多選擇的列表框:Excel宏顯示一個多選列表框中的所有選項

item1 
item2 
item3 
item4 
... 
.. 

,然後當我選擇爲例item1item3從列表框中選擇的項目被填充上顯示另一個小區作爲

item1 - item 2 are selected 

,我試圖是創建多選列表框將溶液和我附宏,然後我試圖環上列表框顯示選擇的項目到一個單元但是我不知道寫宏,我不是Excel的專家,我需要這樣做。

在此先感謝

+1

詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist),換句話說,我們需要看看你已經嘗試過,爲什麼它沒有工作。 – user2140261

+0

我試過的解決方案是創建多選列表框,我附加了一個宏,然後我嘗試將列表框顯示選定的項目循環到一個單元格,但我不知道寫宏,我不是Excel專家我需要這樣做。 – molwiko

回答

2

這應該工作鑑於您開始與新鮮沒有項目選定列表框。我選擇添加和刪除已經創建的字符串中的項目,而不是爲了性能原因而循環每個對象的每個選擇/取消選擇。這是一個選擇,但這應該運行得更順暢。但是,如果您已經在列表框中選擇了項目,那麼在您取消選擇然後重新選擇它們之前,這些項目不會對它們進行解釋。

此選項和每次循環所有值之間的另一個區別在於,使用此方法時,它會按選擇對象的順序添加選擇項/值,與它們在列表框中的順序相反,是正負或無動於衷你的目的,但想通我要補充一點英寸

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 
+0

謝謝,對不起還有一件事我必須將宏指定給列表框,就是這樣嗎? – molwiko

+0

@Molwiko YEs並將'Set rngOutput = [J1]'中的* J1 *更改爲您希望輸出的單元格地址 – user2140261

+0

當我嘗試運行您的代碼時,我的知識受限VB中停止For For = 0到ListBox1.ListCount - 1,我認爲,因爲listBox1它不是正確的參考,如何給一個列表框的名稱,並把正確的參考代碼? – molwiko

相關問題