如果调用sub为false,则退出main sub过程

时间:2014-12-05 20:48:28

标签: excel vba excel-vba

我有一个'保护'子程序Sub unprot_manually(),见下文。我有另一个子程序,可以作为工作簿的主要程序。我想在允许用户运行主程序之前调用此保护程序。使用下面的当前代码,无论输入正确的密码,用户都可以运行主程序。我需要创建一个“保护”吗? function,define as Boolean,然后作为参数传递给main sub?

Sub unprot_manually()
Dim password_input
Dim Pass As String

Application.ScreenUpdating = False

Pass = "xxxxxx"
password_input = Application.InputBox("Password", "Awaiting User Input..")

If password_input = Pass Then
    Call Unprot
'Else
'MsgBox ("Incorrect, Good Bye")
'MsgBox ("Incorrect")
End If

Application.ScreenUpdating = True

End Sub

2 个答案:

答案 0 :(得分:0)

将其从Sub更改为Function,然后检查返回值。

e.g。在你的主要程序中,

if unprot_manually then
    rest of program
else
    msgbox "Incorrect Passowrd"
end if

您的其他部分将成为:

Function  unprot_manually() as Boolean
'set to fail condition until we get a success status
unprot_manually=False

...

If password_input = Pass Then
    Call Unprot
    'passed, so set success condition
    unpot_manually=True
End If

...

End Function

答案 1 :(得分:0)

创建UDF以进行简单的字符串比较有点OTT。您甚至不需要单独的程序,只需将If块放入主程序

即可
Sub Unprot()
   If Application.InputBox("Password", "Awaiting User Input..") = "xxxxxx" Then
      ' Rest of code here
   Else
      MsgBox "Incorrect Password!"
   End If
End Sub

甚至比这更好,只需在UserInterfaceOnly选项设置为true的情况下设置工作表保护,然后用户就无法对前端进行任何更改,但您的代码仍可以无障碍地运行。


更新:(回应评论)

只需使用变量并检查输入:

Sub Unprot()
    Dim tempStr As String
    tempStr = InputBox("Password", "Awaiting User Input..") ' Assign value via input
        If tempStr = vbNullString Then Exit Sub 'If no input, exit sub

    If tempStr = "xxxxxx" Then
      'Rest of Code
    Else
      MsgBox "Incorrect Password!"
    End If
End Sub