2014-12-05 57 views
0

我有一個'保護'子程序Sub unprot_manually(),可以在下面看到。我還有另一個子程序可以作爲工作手冊的主要程序。我想在允許用戶運行主程序之前調用這個保護程序。使用下面的當前代碼,無論輸入正確的密碼,用戶都可以運行主程序。我是否需要創建一個「保護」功能,將其定義爲布爾值,然後將其作爲參數傳遞給主子?如果調用sub爲false,則退出主子過程

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

只是讓我們清楚,'Unprot'將是「主要程序「你指的是? – 2014-12-05 20:56:58

+0

沒有'Prot'和'Unprot'是兩個單獨的子程序,旨在影響第三個'main'子程序的執行 – phillipsK 2014-12-08 17:07:52

回答

0

將它從Sub更改爲Function,然後檢查返回值。

例如在你的主過程,

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 
0

創建UDF做一個簡單的字符串比較是有點OTT。你甚至都不需要爲這個單獨的程序,只是把塊。如果在你的主過程

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,那麼用戶在工作表保護罐在前端做任何改變,但是你的代碼仍然可以不受阻礙地運行。


UPDATE:(在響應評論)

只需使用一個變量,並檢查輸入:

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 
+0

如果用戶點擊'cancel',那麼如何編輯代碼而不用'MsgBox 「錯誤的密碼!」,因爲用戶沒有輸入密碼 – phillipsK 2014-12-08 17:27:29

+0

檢查上面的編輯 – 2014-12-08 20:28:57

相關問題