Vba 如何使用密码阻止私人sub运行

Vba 如何使用密码阻止私人sub运行,vba,button,passwords,private,Vba,Button,Passwords,Private,我有两个用于活动x复选框的专用接头。当我单击一个按钮时,另一个按钮被锁定。我想创建一个按钮,作为覆盖,如果我键入密码,那么两个私有sub将不会运行 Private Sub CRM_box_Click() If CRM_box.Value = True Then CheckBox14.Value = False CheckBox14.Enabled = False Else CheckBox14.Value = False CheckBox14.Enabled =

我有两个用于活动x复选框的专用接头。当我单击一个按钮时,另一个按钮被锁定。我想创建一个按钮,作为覆盖,如果我键入密码,那么两个私有sub将不会运行

Private Sub CRM_box_Click()
If CRM_box.Value = True Then
    CheckBox14.Value = False
    CheckBox14.Enabled = False
Else
    CheckBox14.Value = False
    CheckBox14.Enabled = True
End If

Private Sub RMP_box_Click()
If RMP_box.Value = True Then
    CRM_box.Value = False
    CRM_box.Enabled = False
Else
    CRM_box.Value = False
    CRM_box.Enabled = True
End If

要“覆盖”复选框的
专用子项
,可以执行以下操作:

在VBE中,创建一个模块(如果您还没有),并在第一行输入
Public override As Boolean

对于复选框中的每个专用Sub,在当前
If
语句上方添加以下内容:
If override=False,然后按如下方式退出Sub

Private Sub CRM_box_Click()

    If override = False Then Exit Sub

    If CRM_box.Value = True Then
        RMP_box.Value = False
        RMP_box.Enabled = False
    Else
        RMP_box.Value = False
        RMP_box.Enabled = True
    End If

End Sub
对于问题的密码部分,您可以创建一个
UserForm

如果您对用户表单不熟悉,那么有很多教程和说明,介绍如何通过在谷歌或类似网站上搜索“如何在excel中创建用户表单”之类的内容来创建用户表单

我用
标签
文本框
命令按钮制作了一个简单的
用户表单

对于
命令按钮
,可以使用以下代码:

Private Sub CommandButton1_Click()

    Dim pwrd As String
    Dim setPwrd As String

    pwrd = UserForm1.TextBox1.Text
    setPwrd = "abc" 'Change this string to whatever you want your password to be

        If pwrd = setPwrd Then
            override = False
            Unload UserForm1
        Else
            MsgBox "Incorrect Password" & vbNewLine & "Please try again.", vbCritical
        End If
    End Sub
当您在文本框中输入密码并单击commandbutton时,vba会将您的输入与变量
setPassword
进行比较。如果匹配,则将公共变量
override
设置为
False
。如果密码不匹配,您将收到消息重试

如果执行代码之前,
override=False
会将您的
Private Sub
复选框指向
Exit Sub
——您的代码被“overrided”

总之:

  • 将公共变量声明为布尔值
  • 在每个专用子项中为复选框设置If语句
  • 创建UserForm以输入密码
  • 编写设置密码的代码以及提交密码时发生的情况

  • 您可能会发现有助于理解防止其他用户绕过您的密码表单的方法

    你说“不会跑”是什么意思。。。这样,另一段代码就不会调用它们,或者您是否试图阻止用户进入VBA并手动运行它们?如果这是一个安全问题,那么我应该警告您,没有100%安全的共享Office文档;唯一能让人们更难做他们想做的事的方法。谢谢,这正是你所描述的。有一个问题,一旦我设置了密码和退出子启动,有没有办法反转命令?我试图用另一个密码创建另一个命令按钮flip override=true,但我的原始代码没有运行。再次感谢!我很高兴这有帮助!在复选框的代码中,将
    Else
    添加到
    的末尾,如果override=False,则退出Sub
    。对于第二个命令按钮,复制第一个命令按钮的确切代码,并将
    override=False
    更改为
    override=True
    。如果您想为第二个按钮输入不同的密码,那么这根本不是问题。只需记住哪个按钮的密码。如果回答了您的问题,请确保将答案标记为已接受,以帮助其他社区成员(如果他们有相同的问题)。