Tabellenfelder Passwort schützen

Hallo,

ist es möglich, Tabellenfelder in einer Exceltabelle Passwort zu schützen? Es sollen 3 Abteilungen z.B. auf eine Einsatzplanung auf Basis von Excel zugreifen können, dabei aber die der jeweiligen anderen Abteilungen nicht verändern können.

Wenn nicht möglich, gibt es eine alternative Lösung zu dem Problem?

Vielen Dank schonmal!

ist es möglich, Tabellenfelder in einer Exceltabelle Passwort
zu schützen? Es sollen 3 Abteilungen z.B. auf eine
Einsatzplanung auf Basis von Excel zugreifen können, dabei
aber die der jeweiligen anderen Abteilungen nicht verändern
können.

Hi Pole,
Fritz darf nur Spalte A bearbeiten, Frieda nur Spalte B usw.
Ungetestet:

In den Codebereich von DieseArbeitsmappe:

Private Sub Workbook\_Open()
Call Start
End Sub

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
With ThisWorkbook.Worksheets(1)
 .Unprotect Password:="xyz"
 .UsedRange.Locked = True
 .Protect Password:="xyz"
End With
End Sub

in ein Modul:

Sub Start()
wer = Environ("username")
With ThisWorkbook.Worksheets(1)
 .Unprotect Password:="xyz"
 .UsedRange.Locked = False
 Select Case wer
 Case "Fritz"
 Columns(2).Locked = True
 Columns(3).Locked = True
 Case "Frieda"
 Columns(1).Locked = True
 Columns(3).Locked = True
 Case "Paul"
 Columns(1).Locked = True
 Columns(2).Locked = True
 Case Else
 End Select
 .Protect Password:="xyz"
End With
End Sub

Gruß
Reinhard

Hi Pole und Reinhard,

zu Reinhards Lösung schlage ich zwei Änderungen und eine Alternative vor.

Wenn nur die UsedRange geschützt wird, können alle in den darüber hinausgehenden Bereich schreiben. Besser wäre es, alle Zellen zu schützem.
2.
Zum Testen und für Ausnhamefälle (z. B. neue Benutzer, die das Programm noch nicht kennt) kann im Else-Fall ein Passwort abgefragt werden, das dann die gesamte Tabelle entsperrt.

und die Alternative:
Je nach konkreter Tabellenstruktur kann es einfacher sein, nur einzelne Bereiche (z. B. Spalten) pro Abt. freizugeben. Der Code unten geht davon aus, dass jede Abt. in drei Spalten ändern darf.
Es kann natürlich auch praktischer sein, das Blatt allgmein freizugeben und pro Abt. bestimmte Bereiche zu schützen - so hat es Reinhard gelöst.

Noch eine Bemerkung:
Auch beim Open ist keine weitere „Start“-Prozedur nötig, der Code kann direkt im Workbook_Open() stehen.

Und hier der Code:

Private Sub Workbook\_Open()
 With Worksheets(1)
 .Unprotect Password:="xyz"
 .Cells.Locked = True
 Select Case Environ("username")
 Case "Fritz"
 .Range(.Columns(3), .Columns(5)).Locked = False
 Case "Frieda"
 .Range(.Columns(6), .Columns(8)).Locked = False
 Case "Paul"
 .Range(.Columns(9), .Columns(11)).Locked = False
 Case Else
 If InputBox("Passwort eingeben:", "Geschützt", "?") = "abc" Then \_
 .Cells.Locked = False
 End Select
 .Protect Password:="xyz"
 End With
End Sub

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
 With Worksheets(1)
 .Unprotect Password:="xyz"
 .Cells.Locked = True
 .Protect Password:="xyz"
 End With
End Sub

Eventuell ist es nötig, den Code ebenfalls zu schützem, da beide Passwörter (xyz und abc) hier direkt zu sehen sind.

Grüße aus Kamp-Lintfort
Erich

Hallo Erich,
jepp, mit dem usedrange hast du recht, nicht bedacht, dito für den Codeschutz.
Für unbekannte Benutzer hätte ich eher application.quit vorgesehen oder gar ExitWindowsEx(EWX_Force or EWX_Shutdown, 0); *kicher
Und call im Open-Ereignis finde ich übersichtlich und wartungsfreundlich.
Gruß
Reinhard

Ziemlich coole Lösung! Vielen Dank!
Also so schnell hätte ich das selber nicht hinbekommen, toll!

Hallo Reinhard,

Und call im Open-Ereignis finde ich übersichtlich und
wartungsfreundlich.

Warum im Open-, nicht aber im BeforeClose-Ereignis?

Mir erscheint das Aulagern - außer bei mehrfach genutztem Code - überflüssig (und wenig wartungsfreundlich).

Gruß
Erich