2014-06-26 160 views
0
依賴

是否Optionbox已經使用下面的代碼選擇我已經能夠更改ComboBox的列表(或RowSource)依賴於:組合框上的複選框

Private Sub optYes_Click() 
    Options 
End Sub 

Private Sub optNo_Click() 
    Options 
End Sub 

Private Sub Options() 
    Select Case True 
     Case optYes.Value = True 
      cmb.Enabled = True 
      cmb.RowSource = "=Options!A1:A4" 
     Case optNo.Value = True 
      cmb.Enabled = False 
    End Select 
End Sub 

我想修改這個稍微等等Combobox列表僅限於一組已選中的複選框。所以如果我有10個複選框表示不同的選項,並且用戶只選擇其中的4個,那麼只有這4個複選框出現在Combobox中。

回答

1

這是我會怎麼做:

Private Sub Algeria_Change() 
    Options 
End Sub 

Private Sub Bangladesh_Change() 
    Options 
End Sub 

Private Sub Canada_Change() 
    Options 
End Sub 

Private Sub Denmark_Change() 
    Options 
End Sub 

Private Sub Options() 
    Dim names As Variant, name As Variant 
    Dim old As String 

    names = Array("Algeria", "Bangladesh", "Canada", "Denmark") 

    old = cmb 

    cmb.Clear 
    cmb.Enabled = False 
    For Each name In names 
     If Me.Controls(name) Then 
      cmb.AddItem Me.Controls(name).Caption 
      cmb.Enabled = True 
      If name = old Then cmb.SelText = old 
     End If 
    Next name 
End Sub 

如果你需要更多的複選框只是增加了他們的名字names並調用Options當他們改變。

+0

謝謝。然而,與此相關的問題是,它實質上是選擇列A中的第一個i單元,而不管這些單元中的值是什麼。所以如果選中3個複選框,組合框將列出A列中的前3個單元格,但不一定是使用複選框選擇的值 - 所以如果我從A,B,C,D中選擇B和D,則組合框將顯示A和B,但不是B和D. –

+0

@ user2696883這正是它的作用:顯示組合框中列A的第一個「i」行,對應於所選複選框的數量,而不考慮它們的名稱。 –

+0

謝謝,不過,我希望它顯示_those_精確值已被選中,而不是與選中複選框的數量對應的第一行。我怎樣才能做到這一點? –