2017-05-11 11 views
1

SQLクエリを更新するがパスワードで保護されているExcelシートにVBAマクロがあります。マクロがどのように機能するかは、ボタンをクリックすると、パスワードプロンプトが表示され、正しく入力された場合にクエリが更新されます。間違って入力した場合、何も起こりません。パスワード付きVBAマクロが誤って入力された場合でも動作します

私が最近発見したことは、誰かが誤ってパスワードを入力しても、クエリが更新されたことです。パスワードが間違っていると、マクロの実行を停止するために私のコードに何を入力すればよいでしょうか?

Sub Button1_Click() 

Dim password As Variant 
password = Application.InputBox("Enter Password", "Password Protected") 

Select Case password 
    Case Is = False 
     'do nothing 
    Case Is = "Select15" 
     Range("A1").Value = "Code" 
    Case Else 
     MsgBox "Incorrect Password" 
End Select 


For Each sh In Worksheets 
If sh.FilterMode Then sh.ShowAllData 
Next 

ActiveWorkbook.RefreshAll 


End Sub 
+0

あなたのリフレッシュもO/Sパスワードチェック。キャスト "Select15"ビットにする必要があります。 –

+0

一般的なコメント - Excelワークブックのパスワード保護は、比較的簡単に壊れています。 「Excelパスワードを壊す」または「Excelパスワードを取得する」だけのオンライン検索を実行すれば、たくさんのヒットが得られます。 – BruceWayne

答えて

3
Sub Button1_Click() 

Dim password As Variant 
password = Application.InputBox("Enter Password", "Password Protected") 

Select Case password 
    Case Is = False 
     'do nothing 
      exit sub 
    Case Is = "Select15" 
     Range("A1").Value = "Code" 
    Case Else 
     MsgBox "Incorrect Password" 
     exit sub 
End Select 


For Each sh In Worksheets 
If sh.FilterMode Then sh.ShowAllData 
Next 

ActiveWorkbook.RefreshAll 


End Sub 

パスワードが正しくない場合は、サブを終了する必要があります。 - ^^

それとも、それがfalseの場合、パスワードおよび終了の結果を維持するために、ブールbCorrectを作成することができます.-- V

Sub Button1_Click() 

    Dim password As Variant 
    Dim bCorrect As Boolean 

    password = Application.InputBox("Enter Password", "Password Protected") 

    Select Case password 

    Case Is = False 
     'do nothing 
    Case Is = "Select15" 
     bCorrect = True 
     Range("A1").value = "Code" 
    Case Else 
     MsgBox "Incorrect Password" 
    End Select 

    If Not bCorrect Then Exit Sub 

    For Each sh In Worksheets 
     If sh.FilterMode Then sh.ShowAllData 
    Next 

    ActiveWorkbook.RefreshAll 

End Sub 
+1

ありがとうございます。私は "exit sub"ラインを追加しました。そして今、それは当初の計画どおりに機能しています。 –

+0

@ D.モーリー - 歓迎:) – Vityata

0

ユーザーが入力した値(-1を除く)はすべて「False」と書かれているため、最初のケースがトリガーされます。最初のオプションとしてパスワードが正しいかどうか確認してください。

+0

'Select Case'ステートメントの' False'レッグは、ユーザーが入力ボックスをキャンセルした場合にのみトリガーされます(この場合、 '' password'は 'False'を含む' Variant/Boolean'になります)、またはパスワードとして '0'のようなものを入力すると(' password'は '0 ''を含む 'Variant/String'になりますが、 'False'と比較できるように' Boolean 'に強制的に変換されます)。入力された他の任意の整数値は「True」に強制され、非整数またはテキスト値はすべて「ブール」に強制変換されません。 – YowE3K

関連する問題