VBA真布尔条件不尊重

这可能是一个非常愚蠢的问题,但我似乎无法find我的方式…我定义了一个名为safe_mode的全局variables,是一个布尔值。 在我的一个潜艇我需要检查它的价值,并给它一个新的价值相应。 下面的代码会给你更多的信息。

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的值被正确归因。 换句话说,我在Admin模式下变为true,在Logged时变为False。 但是,如果safe_mode = true条件不受尊重。 即使在注销时,我也会收到提示input密码,因为只有在safe_mode = false且variables在MsgBox中返回true时才会运行该代码。 在尝试注销variables时正确input密码仍保持为真。 将其重新设置为false的唯一方法是错误地input密码。 任何知道他们的方式呢?

谢谢! D.

所以我认为你的variables是空的。 我不清楚当你插入值safe_mode,例如,当你重新打开你的工作簿safe_mode将被清除,所以也许你需要一个工作簿打开,并设置safe_mode值的子? 第二个选项是将值存储在VBA隐藏选项卡中。

我修改了一下你的代码,以便你可以testing它(检查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 

答案:在模块的顶部将公共variables定义为variables。 它只能用于模块。 如果在另一个模块中定义,则不会自动导入。