CheckBox запустил еще один макрос Excel для флажка - PullRequest
1 голос
/ 07 мая 2020

У меня 3 флажка. no1 - это главный флажок. когда он отмечен, no2 и no3 включен, а когда no1 не отмечен, no2 и no3 отключены. когда отмечено no2, no3 отключено, то же самое для no3. в приведенном ниже коде все работает почти идеально, если только не отмечен no3, а затем no1 не отмечен, no2 включен. обычно он должен быть отключен, потому что no1 не отмечен.

Private Sub CheckBox1_Click()
Application.EnableEvents = False
If CheckBox1.Value = True Then
    CheckBox2.Enabled = True
    CheckBox3.Enabled = True
Else
    CheckBox2.Enabled = False
    CheckBox2.Value = False
    CheckBox3.Enabled = False
    CheckBox3.Value = False
End If
Application.EnableEvents = True
End Sub

Private Sub CheckBox2_Click()
Application.EnableEvents = False
If CheckBox2.Value = True Then
Sheets("Deep Storage Box").Visible = True
    CheckBox3.Enabled = False
    CheckBox3.Value = False
Else
Sheets("Deep Storage Box").Visible = False
CheckBox3.Enabled = True
End If
Application.EnableEvents = True
End Sub

Private Sub CheckBox3_Click()
Application.EnableEvents = False
If CheckBox3.Value = True Then
Sheets("Deep Storage Hanging").Visible = True
    CheckBox2.Enabled = False
    CheckBox2.Value = False
Else
Sheets("Deep Storage Hanging").Visible = False
CheckBox2.Enabled = True
End If
Application.EnableEvents = True
End Sub

Я думаю, что когда я снял отметку с no1, "Private Sub CheckBox3_Click ()" после того, как раздел "Else" работает.

1 Ответ

2 голосов
/ 08 мая 2020

Основная проблема, с которой вы сталкиваетесь, пытаясь обработать пользовательский интерфейс с несколькими состояниями, заключается в том, как учесть все различные возможные состояния пользовательских элементов управления (в вашем случае есть три флажка). Вы будете ie в узлах, пытаясь проработать перестановки, если спроектируете logi c на основе отдельных событий флажка.

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

(я только думаю , что я понимаю ваш лог c из вашего описания. Измените этот пример ниже, чтобы он точно соответствовал вашим потребностям.)

В собственном модуле кода я чаще всего создаю простой метод для переключения состояния событий и отображает:

Option Explicit

Public Sub ToggleAppSettings(ByVal newState As Boolean)
    With Application
        .EnableEvents = newState
        .ScreenUpdating = newState
    End With
End Sub

Затем в модуле кода для рабочего листа, содержащего флажки:

Option Explicit

Private Sub CheckBox1_Click()
    SetUXState
End Sub

Private Sub CheckBox2_Click()
    SetUXState
End Sub

Private Sub CheckBox3_Click()
    SetUXState
End Sub

Public Sub SetUXState()
    '--- review the current checkbox status to determine -- and set --
    '    the visibility and usability state of user-exposed controls
    ToggleAppSettings False
    If CheckBox1.Value = False Then
        '--- this is the simplest state, all other controls are disabled
        '    and worksheets are hidden
        CheckBox2.Value = False
        CheckBox2.Enabled = False
        CheckBox3.Value = False
        CheckBox3.Enabled = False
        With ThisWorkbook
            .Sheets("Deep Storage Box").Visible = False
            .Sheets("Deep Storage Hanging").Visible = False
        End With
    Else
        CheckBox2.Enabled = True
        CheckBox3.Enabled = True
        If CheckBox2.Value = True Then
            ThisWorkbook.Sheets("Deep Storage Box").Visible = True
            ThisWorkbook.Sheets("Deep Storage Hanging").Visible = False
            CheckBox3.Value = False
            CheckBox3.Enabled = False
        ElseIf CheckBox3.Value = True Then
            ThisWorkbook.Sheets("Deep Storage Box").Visible = False
            ThisWorkbook.Sheets("Deep Storage Hanging").Visible = True
            CheckBox2.Value = False
            CheckBox2.Enabled = False
        Else
            ThisWorkbook.Sheets("Deep Storage Box").Visible = False
            ThisWorkbook.Sheets("Deep Storage Hanging").Visible = False
        End If
    End If
    ToggleAppSettings True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...