2013-11-04 116 views
0

我有幾個組合框都具有相同的值 - 「」,1-12。我試圖得到它,以便當用戶選擇一個項目時,所有其他項目消失。當選擇一個新項目時,它重新填充最後一個項目。從用戶窗體組合框中刪除項目

這就是我所擁有的。

Private Old182 As String 
Private Sub ComboBox182_Change() 
Dim i 
Dim y 
If ComboBox182 <> Old182 Then 
    For i = 182 To 193 
     If i <> 182 Then 
      If ComboBox182 <> Old182 Then 
       If ComboBox182 <> "" Then 
        Controls("ComboBox" & i).RemoveItem ComboBox182.Value 
        If ComboBox182 <> "" Then 
         If Old182 <> "" Then 
          Controls("ComboBox" & i).AddItem Old182 
         End If 
        End If 
       End If 
      End If 
     End If 
    Next 
End If 
Old182 = ComboBox182.Value 
End Sub 

我第一次運行,它會刪除第一項。比方說,我點擊1.它會刪除(1)。如果我點擊2,它會刪除(3)。我相信這是因爲它是通過索引值來刪除它。 1 =>「」,(1)。因此該數組是「」,2,3等2 =>(3)。如果演示不夠,我很抱歉。無論如何,我怎麼能得到它,以便它將從數組中刪除值,並重置數組,或者如何從數組中刪除值與數組匹配的值而不是索引等於索引?

組合框被通過一系列填充在我的excel表

+1

我無法看到的是'.Clear方法',您應該在添加新元素之前使用它。你擁有所有你需要的東西 - 只需重新思考你的邏輯。 –

+0

我試圖想出一種方法來正確包含您的建議。當我在removeitem行之後添加它時,會按照預期清除剩餘的框,但是,我只想清除一個項目。 –

+0

您無法清除一個項目。您需要清除全部並再次添加新的一組正確的項目。 –

回答

0

我發現我的問題的解決方案如下:

Dim i 
Dim y 
Dim z As String 
z = "" 
If ComboBox182 <> Old182 Then 
    For i = 182 To 193 
     If i <> 182 Then 
      If ComboBox182 <> Old182 Then 
       If Old182 <> "" Then 
        Controls("ComboBox" & i).AddItem Old182, Old182 
        Controls("ComboBox" & i).RemoveItem (Old182 + 1) 
       End If 
       Controls("ComboBox" & i).RemoveItem ComboBox182.ListIndex 
       Controls("ComboBox" & i).AddItem z, ComboBox182.ListIndex 
      End If 
     End If 
    Next 
End If 
    Old182 = ComboBox182.Value 

這適用於每個組合框與數字相應地增加。考慮到這些值是數字開始的並且是有序的,該解決方案在這種情況下效果最好。