使用VBA在内部为我的工作簿添加安全性

使用VBA在内部为我的工作簿添加安全性,vba,excel,Vba,Excel,出于测试目的,让我们假设解锁工作簿的代码为1。 我希望在打开时显示一个输入框,如果用户在输入框中输入错误的代码/或选择“取消”,则工作簿将关闭 Private Sub Workbook_Open() ActiveSheet.Range("A1").Activate Code = Application.InputBox("Enter School Code", CancelCode) If Code < 0 > 1 Or False Then Code = I

出于测试目的,让我们假设解锁工作簿的代码为1。 我希望在打开时显示一个输入框,如果用户在输入框中输入错误的代码/或选择“取消”,则工作簿将关闭

Private Sub Workbook_Open()

ActiveSheet.Range("A1").Activate

 Code = Application.InputBox("Enter School Code", CancelCode)

    If Code < 0 > 1 Or False Then
    Code = Int(1)
        MsgBox ("Unrecognised Code")

Application.Workbooks("CODING.xlsm").Close 'False

    End If

End Sub
Private子工作簿\u Open()
ActiveSheet.Range(“A1”).激活
代码=Application.InputBox(“输入学校代码”,取消代码)
如果代码<0>1或为False,则
代码=Int(1)
MsgBox(“无法识别的代码”)
Application.Workbook(“CODING.xlsm”)。关闭“False”
如果结束
端接头
此时,它会出现,但如果输入了任何数字,它就会运行,如果单击“取消”,它也会关闭输入框并允许访问。

尝试以下操作:

Private Sub Workbook_Open()
    Dim Code As Variant
    Code = Application.InputBox("Enter School Code", CancelCode)
    If Not Code = 1 Then
        MsgBox ("Unrecognised Code")
        ThisWorkbook.Close SaveChanges:=False
    End If
End Sub
刚刚测试过,它对我有效


然而,我要补充的是,这是一种极低级别的安全性,任何对VBA有基本了解的人都可以绕过它。在打开工作簿之前,您只需在另一个工作簿(或VBA即时窗口)中设置Application.EnableEvents=False,工作簿的“打开”事件将不会运行。

如果代码<0>1或False,则是错误的(这是有效的语法,但可能不会执行您认为会执行的操作)。每次都必须重复代码,如Ìf Code<0或Code>1或Code=False,然后。为什么你不简单地检查代码angaist好的值,比如如果代码1那么?Vincent,让我困惑的是,当使用语法If Code<0>1或False时,我让它工作了一段时间,直到发生删除,并且不得不重新执行代码,我尝试了1,但它再次接受了输入的任何数字?您也可以在打开工作簿时按住shift键,以禁用任何自动打开代码的运行。@chris,这非常有效,谢谢。我知道它是非常基本的,虽然它不是严格地被用作一个安全功能,但它更像是一个个性化工作簿的工具,因为我计划为不同的人设置不同的代码,然后触发其他宏。我只需要把基本的部分弄对,非常感谢。不客气。不过有一个建议:如果希望不同的人看到不同的东西,可以使用变量
Environ(“UserName”)
。例如
Select Case Environ(“UserName”)/Case“Matthew Bond”/Msgbox“此文档的所有者”/Case“Joe Bloggs”/Msgbox“其他人”/End Select
(/表示换行符的字符)