阻止UserForm_Initialize触发ToggleButton_Click事件

问题描述 投票:1回答:1

我有一张(“设置”),大部分时间都需要隐藏。我创建了Settings UserForm,其中包含各种设置按钮和切换按钮,隐藏/显示隐藏的工作表(然后单击并输入密码)。

用于隐藏/显示工作表的宏:

Private Sub SettingsTB_Click()

Dim strPassTry As String
Dim strPassword As String
Dim lTries As Long
Dim bSuccess As Boolean

If SettingsTB.Value = True Then
    strPassword = "asd"
    For lTries = 1 To 3
        strPassTry = InputBox("Enter password", "Show Settings sheet")
        If strPassTry = vbNullString Then Exit Sub
        bSuccess = strPassword = strPassTry
        If bSuccess = True Then Exit For
        MsgBox "Incorrect password"
    Next lTries

    If bSuccess = True Then
        Worksheets("Settings").Visible = True
    End If
Else
    Worksheets("Settings").Visible = xlSheetHidden
End If

End Sub

该宏按预期工作,出现问题然后我打开UserForm并且“设置”工作表保持可见。 UserForm_Initialize事件触发SettingsTB_Click事件(要求输入密码)。

UserForm_initialize中的代码用于记住切换按钮位置(没有它,每次打开UserForm,在FALSE中切换按钮):

Private Sub UserForm_Initialize()

If Worksheets("Settings").Visible = True Then
    SettingsTB.Value = True
Else
    SettingsTB.Value = False
    End If

End Sub

是否可以阻止SettingsTB_Click触发UserForm_Initialize,还是应该使用完全不同的方法?

excel vba excel-vba
1个回答
1
投票

使用公共变量或tag-property来阻止click事件的运行。

Private Sub SettingsTB_Click()


Dim strPassTry As String
Dim strPassword As String
Dim lTries As Long
Dim bSuccess As Boolean

If SettingsTB.Tag Then Exit Sub

If SettingsTB.Value = True Then
    strPassword = "asd"
    For lTries = 1 To 3
        strPassTry = InputBox("Enter password", "Show Settings sheet")
        If strPassTry = vbNullString Then Exit Sub
        bSuccess = strPassword = strPassTry
        If bSuccess = True Then Exit For
        MsgBox "Incorrect password"
    Next lTries

    If bSuccess = True Then
        Worksheets("Settings").Visible = True
    End If
Else
    Worksheets("Settings").Visible = xlSheetHidden
End If

End Sub
Private Sub UserForm_Initialize()
SettingsTB.Tag = True
If Worksheets("Settings").Visible = True Then

    SettingsTB.Value = True
Else
    SettingsTB.Value = False
    End If
SettingsTB.Tag = False
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.