繁体   English   中英

VBA多个密码excel

[英]VBA Multiple Passwords excel

下午,首先,这里是VBA菜鸟,请放心,请拼出答案或提供完整的代码,因为我不熟悉,只能根据需要插入块。 我需要更多背景信息。

我想做的是拥有多个正确的密码,但是每个密码都会做不同的事情。 据我所知,它的当前操作如下:

    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

本质上,在弹出窗口中,输入Zebra密码,如果输入错误,则循环,解锁工作表“如果正确,则为3级”。 我想要的是如果它可以拥有密码Zebra解锁级别3,但是另一个密码(例如“老虎”)可以解锁另一个表(例如“ Level 2”)。

最后,无论密码是什么,我都需要一个特定且基本唯一的答案,但不确定如何编写多个密码。 请注意:我想避免编写多个代码,因为用户界面必须足够简单,以便任何水平的用户都可以单击按钮,输入密码并接收正确的信息,而所有其他信息都被隐藏,因为这是高度机密的。

代码示例

首先,您尝试应用“安全性”的方法不合适,因此,我建议找到另一种替代方法来保护文件。

您尝试做的另一种选择是使用Case Statement。 一个例子:

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

希望能帮助到你。

这是另一个例子

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

这应该起作用,但是,您绝对不应将其用于敏感数据。 如果要限制每个用户对不同工作表的访问,建议只为每个用户准备一个单独的工作簿,并为自己准备一个从所有这些工作簿收集数据的主文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM