Excel schreibgeschützt - teilweise aber nur

  • #1
J

jüki

Bekanntes Mitglied
Themenersteller
Dabei seit
04.07.2004
Beiträge
1.242
Reaktionspunkte
0
Ort
Chemnitz
Ein Verwandter von mir trat mit einem Problem an mich heran, das ich -da keine Ahnung- mal an Euch weitergeben will.
Ausgangspunkt:
In eine Excel- Tabelle tragen bis zu 10 verschiedene Menschen Werte in verschiedene Spalten ein. Diese Werte geben Aufschluß über geleistete Tätigkeiten.
Nun soll es so sein, das die einmal eingetragenen Werte nicht mehr selbst veränderbar sind - sondern nur vom Chef. Zum Beispiel mit Paßwort.
Damit soll verhindert werden, das der Schreiber die Werte nicht selbst verändern kann, wenn er zum Beispiel am nächsten Tag feststellt, seine gestern eingetragenen Zahlen liegen unter dem Durchschnitt.
Ist so etwas überhaupt machbar?

Einen Hinweis bekam ich schon:
Du brauchst möglicherweise ein Makro, das bei allen gefüllten Feldern den Schreibschutz aktiviert.
Das Makro wird dann immer nach einem Eintrag vom jeweiligen User ausgeführt.
Müsste auch möglich sein, das Makro automatisch vor dem Schliessen/Speichern ausführen zu lassen.
So wird verhindert, daß am nächsten Tag/beim nächsten Öffnen Feldinhalte geändert werden können.

Aber weder der, der mir das empfahl, noch ich haben auch nur die kleinste Ahnung, wie sowas geht.

Ich würde mich über Hinweise sehr freuen.
(
haha.gif
könnte ich doch dann bei meinem Verwandten ein bissel angeben!)

Jürgen
 
  • #2
Hallo jüki,

also das ist im Ansatz schon ganz gut.
Makro automatisch vor dem Schliessen/Speichern ausführen zu lassen

Folgende Makros sind notwendig:

a) Makro beim Schliessen
Diese Makro setzt auf alle Zellen einen Schreibschutz, und zwar mit Passwort, sonst kann jeder einfach den Blattschutz wieder entfernen. So kann auch bei nicht aktiviertem Makro keiner das Blatt ändern.

b) Makro beim Öffnen
Hier wird der Benutzer festgestellt und entsprechend die leeren Zellen entsperrt, in die der Benutzer Eingaben machen darf.
Bei nicht registrierten Benutzern kann man die Mappe eventuell gleich wieder schliessen.

c) Makro mit besonderem Passwort zur Änderung von Angaben
(PW kennt nur der Chef)
Makro entfernt den Schreibschutz komplett.

Die Makros mit Passwort-Abfrage kommen in ein PW-geschütztes VBA-Modul, so dass keiner die PWs einsehen kann. 

Soweit erstmal ...

Wie sind denn die Bereiche des einzelnen Benutzer aufgebaut ?
Jeweils eine Spalte ab einer bestimmten Zeile ?

Gruß Matjes :)
 
  • #3
Hallo jüki,

ein Beispiel:

Also folgende Makros sind in einem Modul zu speichern:
Code:
Option Explicit

'<<<< A N P A S S E N  xxx >>>>
Private Const c_PW_BLATT = Blattschutzpasswort
Private Const c_BLATTNAME = Blatt1
Private Const c_ABZEILE = 2
Private Const c_PW_CHEF = HierKommtDerChef
'<<<< A N P A S S E N   E N D E>>>>

Private Type MyBenutzer_struct
  strBenutzerName As String
  lSpalte         As Long
End Type

Private fB() As MyBenutzer_struct, fBCnt As Long

'***************************************************************************
Private Function InitFeldUserRights(fB() As MyBenutzer_struct, fBCnt As Long)
  
  fBCnt = 0: ReDim fB(1 To 1)
  
'<<<< A N P A S S E N yyy >>>>
'Benutzername und Spalte

  fBCnt = fBCnt + 1
  ReDim Preserve fB(1 To fBCnt)
  With fB(fBCnt)
    .strBenutzerName = BenutzernameSpalte1: .lSpalte = 1
  End With
  
  fBCnt = fBCnt + 1
  ReDim Preserve fB(1 To fBCnt)
  With fB(fBCnt)
    .strBenutzerName = BenutzernameSpalte2: .lSpalte = 2
  End With
  
  fBCnt = fBCnt + 1
  ReDim Preserve fB(1 To fBCnt)
  With fB(fBCnt)
    .strBenutzerName = BenutzernameSpalte3: .lSpalte = 3
  End With
'<<<< A N P A S S E N   E N D E>>>>
  
End Function

'****************************************************************************
Function BlattSetzen() As Worksheet
  
  On Error Resume Next
  Set BlattSetzen = ThisWorkbook.Worksheets(c_BLATTNAME)
  If BlattSetzen Is Nothing Then
    MsgBox (Der in der Konstanten c_BLATTNAME definierte Blattname existiert nicht.)
  End If
  On Error GoTo 0
End Function

'****************************************************************************
Sub FuerBenutzerEntsperren()
  
  Dim ws As Worksheet
  Dim sBenutzer As String
  Dim x As Long, lRow As Long, lCol As Long
  
  Set ws = BlattSetzen
  If ws Is Nothing Then Exit Sub
  
  sBenutzer = Application.UserName
  Call InitFeldUserRights(fB(), fBCnt)
  
  For x = 1 To fBCnt
    If sBenutzer = fB(x).strBenutzerName Then
      lCol = fB(x).lSpalte
     ->letzte benutzte Zeile in Spalte suchen
      lRow = ws.Cells(ws.Rows.Count, lCol).End(xlUp).Row
     ->Blatt entsperren
      ws.Unprotect Password:=c_PW_BLATT
     ->alle Zellen als locked setzen
      ws.Cells.Locked = True
     ->ab der letzten beschriebenen Zeile die nächsten 100 Zellen unlocked
      ws.Range(ws.Cells(lRow + 1, lCol), ws.Cells(lRow + 100, lCol)).Locked = False
     ->Blatt sperren
      ws.Protect Password:=c_PW_BLATT
      ws.Parent.Save
      Exit For
    End If
  Next
  
AUFRAEUMEN:
  Set ws = Nothing
End Sub

'****************************************************************************
Sub KomplettSperren()
  
  Dim ws As Worksheet
  
  Set ws = BlattSetzen
  If ws Is Nothing Then Exit Sub

 ->Blatt entsperren
  ws.Unprotect Password:=c_PW_BLATT
 ->alle Zellen als locked setzen
  ws.Cells.Locked = True
 ->Blatt sperren
  ws.Protect Password:=c_PW_BLATT
 ->speichern
  ws.Parent.Save
  
AUFRAEUMEN:
  Set ws = Nothing
End Sub

'****************************************************************************
Sub HierKommtDerChef()

  Dim ws As Worksheet
  Dim sPW As String
  sPW = InputBox( _
          Bitte geben Sie das Passwort ein, _
          Eingabe Entsperr-Passwort, _
          )
  
  If sPW = c_PW_CHEF Then
    Set ws = BlattSetzen
    If ws Is Nothing Then Exit Sub
   ->Blattschutz aufheben
    ws.Unprotect Password:=c_PW_BLATT
    Set ws = Nothing
  Else
    MsgBox falsches PW
  End If
End Sub
a) Excel-Datei öffnen
b) VB-Editor öffnen (mit Alt + F11)
c) VBProject(Dateiname)->rechte Maustaste -> Einfügen -> Modul
d) den Makro-Code per copy and paste in das sich öffnende
   Code-Fenster kopieren
e) unter A N P A S S E N xxx den Inhalt der Konstanten anpassen
f) unter A N P A S S E N yyy Benutzernamen und Spalte eintragen
   Wenn mehr als 3 Benutzer notwendig sind entsprechend
   Zeilen kopieren
  fBCnt = fBCnt + 1
  ReDim Preserve fB(1 To fBCnt)
  With fB(fBCnt)
    .strBenutzerName = BenutzernameSpalte3: .lSpalte = 3
  End With

   
Jetzt  kannst Du schon ausprobieren, ob die Funktionen klappen.
Der Aufruf des Makro KomplettSperren () müßte das Blatt komplett sperren.
Wenn Du als Benutzer eingetragen bist, kannst Du mit dem Aufruf des
Makro FuerBenutzerEntsperren() die nächsten 100 Zellen deiner Spalte
entsperren.

Und Chef kannst Du auch spielen: Mit dem Makro HierKommtDerChef().
Der entfernt den Blattschutz komplett.


So, damit beim Öffen der Datei FuerBenutzerEntsperren()
und beim Schliessen der Datei KomplettSperren () aufgerufen wird,
kopierst Du folgende Makros in die Code-Seite->DieseArbeitsmappe'.
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call KomplettSperren
End Sub

Private Sub Workbook_Open()
  Call FuerBenutzerEntsperren
End Sub


Gruß Matjes :)
 
  • #4
Ich muß mich entschuldigen, das ich so spät und so kurz antworte - bei mir kam privat etwas dazwischen - ich kann mich womöglich erst die kommende Woche erst wieder damit beschäftigen.
Trotzdem möchte ich mich erst mal ganz herzlich bedanken!
Das ist eine Anleitung, wie ich sie mir wünschte - ich habe nämlich von Makros und derlei nicht die mindeste Ahnung.
Nochmals - vielen Dank, sobald ich wieder daheim bin, melde ich mich und berichte selbstverständlich sofort.
Jürgen
 
  • #5
So, @Matjes - ich bin wieder da. Und habe mir das, also Deine Anleitung nun mal angeschaut - ich gestehe, ich bin heillos überfordert.
Makros - davon ich weiß nur, das es die gibt.
Ich hab mir das Ganze mal rauskopiert und drucke es aus. Mein Verwandter sagte, er hätte sich schon etwas mit Makros beschäftigt- ich hoffe, das er klar kommt.
Da ich seine PCs grad bei mir zum Hardware- Umbau und Neuinstallation mit nLite- XP- Versionen da habe (das ist nun wiederum meine Spezialstrecke) wird er sich nicht selbst hier melden können, ich werde da erst mal der Mittler sein.
Vielen Dank noch einmal für die große Mühe, die Du Dir gemacht hast!
Ich werde das Thema vorläufig noch nicht als beantwortet markieren, ja?
Jürgen
 
Thema:

Excel schreibgeschützt - teilweise aber nur

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben