2017-11-13 8 views
0

午後、まずはVBAのnoobを読んでください。それで簡単に答えてください。また、必要に応じてチャンクを挿入するのに慣れていないので、完全なコードを入力してください。私はもう少し文脈が必要です。VBA Multiple Passwords excel

私は何をしようとしていますが、複数の正しいパスワードを持っていますが、それぞれのパスワードは異なる動作をします。これは、私の知る限り得ているようで、次のように、現在の操作は次のとおりです。間違っている場合

Sub zebra() 

Dim MyPassword As String 
    MyPassword = "Zebra" ' Change this to alter password 
    If InputBox("Please enter password to continue.", "Enter Password") <> MyPassword Then 

    Dim Ans As Boolean 
    Const Pword As String = "Zebra" ' This should match password 

    Ans = False 

    Do While Ans = False 
     If InputBox("Please enter password to continue.", "Enter Password") = Pword Then 
      Ans = True 
     End If 
    Loop 
Exit Sub 
End If 

     Sheets("Level 3").Visible = True ' This selects what sheet should become visible 


    End Sub 

は、本質的には、ポップアップウィンドウ、「正しい場合はレベル3」シートのロックを解除し、ゼブラパスワード、ループを入力してください。私が望むのは、パスワードがZebraのレベル3のロックを解除したが、「Tiger」のような別のパスワードが「レベル2」のような別のシートのロックを解除した場合です。

最終的には、これまでのパスワードは何ですか、私は具体的かつ基本的にユニークな答えが必要ですが、複数のパスワードをどのようにコードするかは不明です。 複数のコードを書くのは避けたいのですが、ユーザーインターフェイスは、ボタンをクリックしてパスワードを入力し、他のすべての情報がそのまま隠されている状態で正しい情報を受け取るためには、非常に機密です。

Code example

+4

Excelのセキュリティあなたは*機密性の高いデータ*心配している場合に移動するための方法ではありません。誰でも簡単にパスワードを壊すことができます。 –

答えて

4

まず最初にすべての、あなたは「セキュリティ」を適用しようとしている方法は適切ではありませんので、私はあなたのファイルを保護するために、別の選択肢を見つけることをお勧めします。

あなたがしようとしているのは、Caseステートメントです。 例:

Select Case MyPassword 
    Case "Zebra" 
     Sheets("Level 3").Visible = True 
    Case "Tiger" 
     Sheets("Level 3").Visible = False 
     Sheets("Level 2").Visible = True 
    Case "Elephant" 
     AnotherAction 
    Case "" 
     Msgbox "Password can not be empty." 
    Case Else 
     Msgbox "Wrong password." 
End Select 

希望します。

+0

これは私が必要なもののように見えます。私は "事件"について聞いたことがないし、それを行くだろう。 (自己教えnoob)。ありがとうございました! – jallington

0

これは機能するはずですが、機密データにはこれを絶対に使用しないでください。ユーザーごとに異なるシートへのアクセスを制限する場合は、ユーザーごとに個別のブックを用意し、これらすべてのブックからデータを収集するマスターファイルを持つことをお勧めします。ここで

Sub testy2ElectricBoogaloo() 
    dim i as long, ans as boolean 
    Dim mystr As String 
    ans = False 
    ReDim arr(1 To Worksheets.Count, 1 To 2) 
    For i = 1 To UBound(arr) 
    arr(i, 1) = Worksheets(i).Name 
    'My code makes every password simply the sheet name followed by a smiley face. 
    'Adjust to fit your actual passwords. 
    arr(i, 2) = Worksheets(i).Name & " :)" 
    Next i 
    Do While ans = False 
     mystr = InputBox("Please enter password to continue.", "Enter Password") 
     If mystr = vbNullString Then Exit Sub 
     For i = 1 To ThisWorkbook.Worksheets.Count 
     If mystr = arr(i, 2) Then ans = True: Worksheets(arr(i, 1)).Visible = True: Exit For 
     Next i 
    Loop 
End Sub 
2

は別の例である

Option Base 1 
Sub CheckPassword() 
Dim allPasswords(3) 
allPasswords(1) = "Zebra" 
allPasswords(2) = "Tiger" 
allPasswords(3) = "Monkey" 

Dim passwordEntered As String 
Dim iChanceCount As Integer 
Dim ws As Worksheet 


Do While True 
    passwordEntered = InputBox("Please enter password to continue.", "Enter Password") 
    If passwordEntered = allPasswords(1) Then 
     Set ws = Sheets("Level 1") 
    Else 
     If passwordEntered = allPasswords(2) Then 
      Set ws = Sheets("Level 2") 
     Else 
      If passwordEntered = allPasswords(3) Then 
       Set ws = Sheets("Level 3") 
      End If 
     End If 
    End If 
    'see if we set the worksheet 
    If ws Is Nothing Then 
     iChanceCount = iChanceCount + 1 
     'give them 5 tries then exit 
     If iChanceCount >= 5 Then Exit Sub 
    Else 
     'we have a worksheet so make it visible and exit 
     ws.Visible = xlSheetVisible 
     Exit Sub 
    End If 


Loop 


End Sub