我有一个'保护'子程序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
答案 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