Выпадающий список зависит от флажка

#forms #excel #vba #checkbox #combobox

#формы #excel #vba #флажок #поле со списком

Вопрос:

Я смог изменить список (или RowSource ) выпадающего списка в зависимости от того, был ли выбран Optionbox, используя следующий код:

 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
 

Я хотел бы немного изменить это, чтобы список со списком был ограничен группой установленных флажков. Итак, если у меня есть 10 флажков, обозначающих разные параметры, и пользователь выбирает только 4 из них, то в поле со списком появятся только эти 4.

Ответ №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 , когда они меняются.

Комментарии:

1. Спасибо. Проблема с этим, однако, заключается в том, что он, по сути, выбирает первые ячейки i в столбце A, независимо от того, какие значения находятся в этих ячейках. Итак, если установлены 3 флажка, в поле со списком будут перечислены первые 3 ячейки в столбце A, но не обязательно значения, которые были выбраны с помощью флажков — так что, если я выбрал B и D из A, B, C, D, тогда в поле со списком будут отображаться A и B, но не B и D.

2. @user2696883 Это именно то, что он делает: отображает первые i строки столбцов A внутри выпадающего списка, соответствующие количеству выбранных флажков, независимо от их названия.

3. Спасибо, однако я бы хотел, чтобы он показывал , что были выбраны точные значения, а не первые строки i, соответствующие количеству выбранных флажков. Как я могу это сделать?

4. @user2696883 я не понимаю, вы пробовали пример? Что вы подразумеваете под «этими точными значениями»? Разве вы не хотите отображать содержимое ячеек?

5. Я попробовал пример @z. Я имею в виду, что, скажем, у флажков есть опции для Алегрии, Бангладеш, Канады и Дании, и я выбираю только Бангладеш и Данию, тогда в поле со списком должны отображаться только эти две страны, а не Алжир и Бангладеш, которые будут первыми 2 в списке.