Взаимоисключающий флажок в Excel (Toggle) - PullRequest
1 голос
/ 16 июня 2010

У меня есть электронная таблица с 50+ флажками на панели инструментов форм.В некоторых случаях вы можете установить только один флажок из группы, т.е. вы установите один флажок от флажка 1 до флажка 5.

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

Как сгруппировать флажок1 в флажок5, чтобы они стали взаимоисключающими для группы.

Спасибо

Ответы [ 3 ]

1 голос
/ 16 июня 2010

Возможно, вы захотите использовать радиокнопку, возможно, с разделителем между группами, поскольку это также означает для конечного пользователя, что эти поля являются взаимоисключающими.

Радиокнопка по определениюВзаимоисключающие внутри группы.

Помните, что использование флажков в местах, где вы должны использовать радиоблоки, может сбить с толку ваших конечных пользователей, поскольку они задаются вопросом, почему этот флажок внезапно деактивируется, когда используются радиокнопкифактор путаницы не существует.

0 голосов
/ 17 апреля 2017

Почему вы думаете, что переключатели (радио) являются взаимоисключающими?У меня есть два из них в группе.Когда я нажимаю один из них, другой включается.И нет никакого способа отменить их выбор.Изначально они работали как задумывалось, но когда я создал вторую группу для несвязанного элемента управления с другим блоком ссылок и двумя дополнительными кнопками, началось странное поведение.Пока что лучшее, что я могу сделать, - это отдельная радиокнопка для каждой комбинации элементов управления и группы NO.

0 голосов
/ 16 июня 2010

Если вы не можете использовать дополнительные кнопки, попробуйте этот код

Private Sub CheckBox1_Change()

    With Me.CheckBox1
        If .Value Then ClearGroup .GroupName, .Name
    End With

End Sub

Private Sub CheckBox2_Change()

    With Me.CheckBox2
        If .Value Then ClearGroup .GroupName, .Name
    End With

End Sub

Private Sub CheckBox3_Change()

    With Me.CheckBox3
        If .Value Then ClearGroup .GroupName, .Name
    End With

End Sub

Private Sub ClearGroup(sGroup As String, sName As String)

    Dim ole As OLEObject

    For Each ole In Me.OLEObjects
        If TypeName(ole.Object) = "CheckBox" Then
            If ole.Object.GroupName = sGroup And ole.Name <> sName Then
                ole.Object.Value = False
            End If
        End If
    Next ole

End Sub
...