VBA True布尔条件未得到尊重

时间:2017-06-28 13:02:10

标签: excel vba boolean

这可能是一个非常愚蠢的问题,但我似乎无法找到解决方法......我定义了一个名为safe_mode的全局变量,它是一个布尔值。在我的一个潜艇中,我需要检查它的值并相应地给它一个新值。下面的代码将为您提供更多信息。

Private Sub Dev_Mode_Click()

Dim pass As String


If safe_mode = False Then

pass = InputBox("Password")
If pass <> "admin_rights" Then
    Sheets("Database").Visible = xlSheetVeryHidden
    Sheets("NewFile").Visible = xlSheetVeryHidden
    Sheets("LandingPage").Dev_Mode.Caption = "Admin"
    MsgBox ("Invalid Password")
    safe_mode = False
    MsgBox (safe_mode)
    Exit Sub
Else
    Sheets("Database").Visible = True
    Sheets("NewFile").Visible = True
    Sheets("LandingPage").Dev_Mode.Caption = "Log Off"
    safe_mode = True
    MsgBox (safe_mode)
    Exit Sub
End If
End If

If safe_mode = True Then

    Sheets("Database").Visible = xlSheetVeryHidden
    Sheets("NewFile").Visible = xlSheetVeryHidden
    safe_mode = False
    Sheets("LandingPage").Dev_Mode.Caption = "Admin"
    MsgBox ("Disconnect successful")
    MsgBox (safe_mode)
    Exit Sub
End If
End Sub

safe_mode的值已正确归因。换句话说,我在管理模式下变为真,在记录时变为假。但是,不遵守If safe_mode = true条件。我甚至在注销时都会提示输入密码,这是没有意义的,因为该代码仅在safe_mode = false并且变量在MsgBox中返回true时运行。在尝试注销变量时输入正确的密码时,变量仍然为真。将其设置为false的唯一方法是错误地输入密码。有人知道他们的方式吗?

谢谢! d。

2 个答案:

答案 0 :(得分:0)

答案:在模块顶部将变量定义为public。它仅适用于模块。如果它在另一个模块中定义,则不会自动导入。

答案 1 :(得分:0)

所以我认为你的变量是空的。当您向safe_mode,e插入值时,我不清楚。 G。当你重新打开你的工作簿时,safe_mode将被清除,所以也许你需要一个在工作簿打开时触发的sub并设置safe_mode的值?第二个选项是将值存储在VBA隐藏选项卡中。

我已修改了一些您的代码,以便您可以对其进行测试(以检查safe_mode是否为空):

Public safe_mode As Boolean

Private Sub Dev_Mode_Click()

Dim pass As String

If IsEmpty(safe_mode) = True Then
   MsgBox("Cannot check if admin mode")
Else
   If (safe_mode = False) Then

   pass = InputBox("Password")
      If pass <> "admin_rights" Then
         Sheets("Database").Visible = xlSheetVeryHidden
         Sheets("NewFile").Visible = xlSheetVeryHidden
         Sheets("LandingPage").Dev_Mode.Caption = "Admin"
         MsgBox ("Invalid Password")
         safe_mode = False
         MsgBox (safe_mode)
         Exit Sub
      Else
         Sheets("Database").Visible = True
         Sheets("NewFile").Visible = True
         Sheets("LandingPage").Dev_Mode.Caption = "Log Off"
         safe_mode = True
         MsgBox (safe_mode)
         Exit Sub
      End If
   ElseIf (safe_mode = True) Then

      Sheets("Database").Visible = xlSheetVeryHidden
      Sheets("NewFile").Visible = xlSheetVeryHidden
      safe_mode = False
      Sheets("LandingPage").Dev_Mode.Caption = "Admin"
      MsgBox ("Disconnect successful")
      MsgBox (safe_mode)
      Exit Sub
   End If
End If
End Sub