Excel schreibgeschützt - teilweise aber nur

Dieses Thema Excel schreibgeschützt - teilweise aber nur im Forum "Microsoft Office Suite" wurde erstellt von jüki, 6. Mai 2007.

Thema: Excel schreibgeschützt - teilweise aber nur Ein Verwandter von mir trat mit einem Problem an mich heran, das ich -da keine Ahnung- mal an Euch weitergeben will....

  1. 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.
    ([​IMG]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.
    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
     
Die Seite wird geladen...

Excel schreibgeschützt - teilweise aber nur - Ähnliche Themen

Forum Datum
Excel öffnet schreibgeschützt Windows XP Forum 25. Juli 2006
Excel-Makro öffnet Datei schreibgeschützt ohne Mitteilung Windows XP Forum 22. Sep. 2005
Excel-Feature gesucht Microsoft Office Suite 11. Okt. 2016
Excel Tabelle Werte zu ordnen Microsoft Office Suite 23. Sep. 2016
Excel: Bereiche auf 'leer' Überprüfen Microsoft Office Suite 15. Sep. 2016