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:

  1. 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.

  2. Blenden Sie die Arbeitsblätter für Benutzer 1 und Benutzer 2 aus.

  3. Erstellen Sie ein Formular, das beim Öffnen der Arbeitsmappe angezeigt wird, und fragen Sie nach einem Benutzernamen und einem Kennwort.

  4. Erstellen Sie einen Makrocode, der das richtige Arbeitsblatt basierend auf dem Benutzernamen und dem Kennwort entsperrt und anzeigt.

  5. 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:

  1. Drücken Sie Alt + F11, um den VBA-Editor anzuzeigen.

  2. Wählen Sie im VBA-Editor im Menü Einfügen die Option Benutzerformular. Ein neues, leeres Benutzerformular wird zusammen mit der Formular-Toolbox angezeigt.

  3. Fügen Sie mithilfe der Steuerelemente in der Formular-Toolbox ein TextBox-Steuerelement hinzu, in das der Benutzer seinen Benutzernamen eingibt.

  4. Ändern Sie die Eigenschaften für das TextBox-Steuerelement so, dass der Name txtUser lautet.

  5. Fügen Sie mithilfe der Steuerelemente in der Formular-Toolbox ein TextBox-Steuerelement hinzu, in das der Benutzer sein Kennwort eingibt.

  6. Ändern Sie die Eigenschaften für das TextBox-Steuerelement so, dass der Name txtPass lautet.

  7. Fügen Sie direkt unter den TextBox-Steuerelementen ein CommandButton-Steuerelement hinzu.

  8. Ä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.