Schutz einzelner Arbeitsblätter durch Benutzer (Microsoft Excel)
Mit Excel können Sie einzelne Arbeitsblätter schützen, wie Sie in anderen Ausgaben von ExcelTips. erfahren haben. (Sie wählen Extras | Schutz | Blatt schützen.) Mit diesem Ansatz können Sie einzelne Arbeitsblätter unabhängig voneinander mit einem anderen http: // Benutzernamen-Kennwort schützen .com / 14 / was macht ein gutes Passwort aus [Passwörter].
Dies bedeutet, dass ein Benutzer Änderungen an einem Arbeitsblatt mit einem Kennwort vornehmen kann und ein anderer Benutzer ein anderes Kennwort verwenden kann, um Änderungen am anderen Arbeitsblatt vorzunehmen.
Was ist, wenn Sie den Zugriff auf die Arbeitsblätter jedoch vollständig einschränken möchten?
Was ist, wenn Sie nicht einmal möchten, dass ein nicht autorisierter Benutzer das andere Arbeitsblatt sieht? Dieses Bedürfnis ist etwas schwieriger zu befriedigen, aber es kann getan werden. Der grundlegende Ansatz wäre wie folgt:
-
Richten Sie eine Arbeitsmappe mit drei Arbeitsblättern ein: Eines, das immer geöffnet ist, eines für Benutzer 1 und das dritte für Benutzer 2.
-
Blenden Sie die Arbeitsblätter für Benutzer 1 und Benutzer 2 aus.
-
Erstellen Sie ein Formular, das beim Öffnen der Arbeitsmappe angezeigt wird, und fragen Sie nach einem Benutzernamen und einem Kennwort.
-
Erstellen Sie einen Makrocode, der das richtige Arbeitsblatt basierend auf dem Benutzernamen und dem Kennwort entsperrt und anzeigt.
-
Schützen Sie die gesamte Arbeitsmappe (Extras | Schutz | Arbeitsmappe schützen).
Die Schritte 1, 2 und 5 sind einfach durchzuführen und wurden in anderen Ausgaben von ExcelTips behandelt. Der Kern dieses Ansatzes sind jedoch die Schritte 3 und 4. Sie können ein Benutzerformular erstellen, indem Sie die folgenden Schritte ausführen:
-
Drücken Sie Alt + F11, um den VBA-Editor anzuzeigen.
-
Wählen Sie im VBA-Editor im Menü Einfügen die Option Benutzerformular. Ein neues, leeres Benutzerformular wird zusammen mit der Formular-Toolbox angezeigt.
-
Fügen Sie mithilfe der Steuerelemente in der Formular-Toolbox ein TextBox-Steuerelement hinzu, in das der Benutzer seinen Benutzernamen eingibt.
-
Ändern Sie die Eigenschaften für das TextBox-Steuerelement so, dass der Name txtUser lautet.
-
Fügen Sie mithilfe der Steuerelemente in der Formular-Toolbox ein TextBox-Steuerelement hinzu, in das der Benutzer sein Kennwort eingibt.
-
Ändern Sie die Eigenschaften für das TextBox-Steuerelement so, dass der Name txtPass lautet.
-
Fügen Sie direkt unter den TextBox-Steuerelementen ein CommandButton-Steuerelement hinzu.
-
Ändern Sie die Eigenschaften für das CommandButton-Steuerelement so, dass sein Name btnOK und seine Beschriftung OK ist.
Wenn Sie Ihr Benutzerformular erstellt haben, können Sie den soeben platzierten Steuerelementen Makrocode zuordnen. Stellen Sie sicher, dass das Benutzerformular ausgewählt ist, und drücken Sie F7, um das Codefenster für das Formular anzuzeigen. Das Fenster kann eine oder zwei Zeilen automatisch generierten Codes enthalten. Ersetzen Sie dies durch den folgenden Code:
Dim bOK2Use As Boolean Private Sub btnOK_Click() Dim bError As Boolean Dim sSName As String Dim p As DocumentProperty Dim bSetIt As Boolean bOK2Use = False bError = True If Len(txtUser.Text) > 0 And Len(txtPass.Text) > 0 Then bError = False Select Case txtUser.Text Case "user1" sSName = "u1sheet" If txtPass.Text <> "u1pass" Then bError = True Case "user2" sSName = "u2sheet" If txtPass.Text <> "u2pass" Then bError = True Case Else bError = True End Select End If If bError Then MsgBox "Invalid User Name or Password" Else 'Set document property bSetIt = False For Each p In ActiveWorkbook.CustomDocumentProperties If p.Name = "auth" Then p.Value = sSName bSetIt = True Exit For End If Next p If Not bSetIt Then ActiveWorkbook.CustomDocumentProperties.Add _ Name:="auth", LinkToContent:=False, _ Type:=msoPropertyTypeString, Value:=sSName End If Sheets(sSName).Visible = True Sheets(sSName).Unprotect (txtPass.Text) Sheets(sSName).Activate bOK2Use = True Unload UserForm1 End If End Sub Private Sub UserForm_Terminate() If Not bOK2Use Then ActiveWorkbook.Close (False) End If End Sub
Der obige Code macht mehrere Dinge. Beachten Sie, dass es zwei Verfahren gibt: ein längeres, das ausgeführt wird, wenn der Benutzer auf die Schaltfläche OK im Formular klickt, und ein anderes, das ausgeführt wird, wenn das Formular beendet wird. Wenn der Benutzer auf die Schaltfläche OK klickt, prüft das Verfahren, ob die Kombination aus Benutzername und Kennwort korrekt ist. Ist dies nicht der Fall, wird der Benutzer benachrichtigt. Wenn dies der Fall ist, wird der autorisierte Blattname in einer Dokumentvariablen gespeichert und das entsprechende Blatt wird ungeschützt angezeigt.
Wenn Sie die zulässigen Benutzernamen, Blattnamen und Kennwörter ändern möchten, können Sie dies tun, indem Sie die gewünschten Änderungen in der Struktur „Fall auswählen“ oben in diesem Makrocode vornehmen.
Das zweite Makro in diesem Code (UserForm_Terminate) kommt ins Spiel, wenn der Benutzer versucht, Ihr Formular einfach zu schließen, ohne einen Benutzernamen und ein Kennwort einzugeben. In diesem Fall wird die Arbeitsmappe einfach geschlossen, wenn der Autorisierungsprozess zuvor nicht abgeschlossen wurde.
Zusätzlich zum obigen Code müssen Sie der Arbeitsmappe selbst die folgenden Makros hinzufügen. Diese öffnen das Benutzerformular, wenn die Arbeitsmappe geöffnet wird, und schützen das Arbeitsblatt, wenn die Arbeitsmappe geschlossen wird.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Worksheet Dim bSaveIt As Boolean bSaveIt = False For Each w In Worksheets If w.Visible Then Select Case w.Name Case "u1sheet" w.Protect ("u1pass") w.Visible = False bSaveIt = True Case "u2sheet" w.Protect ("u2pass") w.Visible = False bSaveIt = True End Select End If Next w If bSaveIt Then ActiveWorkbook.CustomDocumentProperties("auth").Delete ActiveWorkbook.Save End If End Sub Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name <> "Main" Then If Sh.Name <> ActiveWorkbook.CustomDocumentProperties("auth").Value Then Sh.Visible = False MsgBox "You don't have authorization to view that sheet!" End If End If End Sub
Wenn der Benutzer die Arbeitsmappe schließt – er ist mit seiner Arbeit fertig -, werden die entsprechenden Arbeitsblätter wieder geschützt und ausgeblendet. (Wenn Sie Namen und Kennwörter von Benutzerblättern ändern, müssen Sie diese auch hier in der Struktur „Fall auswählen“ ändern.) Das Makro löscht dann die entsprechende Dokumenteigenschaft und speichert die Arbeitsmappe.
Ein weiteres interessantes Makro ist die Prozedur Workbook_SheetActivate.
Dies ist enthalten, wenn ein Benutzer versucht, Format | zu verwenden Blatt | Einblenden, um das Arbeitsblatt eines anderen Benutzers einzublenden. In diesem Fall wird der autorisierte Blattname des Benutzers (der in einer Dokumentvariablen gespeichert war, als der Benutzer ursprünglich autorisiert wurde) mit dem angezeigten Blatt verglichen. Wenn es nicht übereinstimmt, darf der Benutzer das Arbeitsblatt nicht anzeigen. Beachten Sie auch, dass diese Prozedur auf ein Arbeitsblatt mit dem Namen „Main“ verweist. Dieses Arbeitsblatt ist das dritte Arbeitsblatt, das am Anfang dieses Tipps erwähnt wird.
Dieses Arbeitsblatt wird auch zum ersten Mal angezeigt, wenn die Arbeitsmappe geöffnet wird.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (1952) gilt für Microsoft Excel 97, 2000, 2002 und 2003.