#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 в списке.