Excel-Tabelle schützen vor zweite Bearbeitung

  • #1
B

bbp1986

Aktives Mitglied
Themenersteller
Dabei seit
12.07.2006
Beiträge
43
Reaktionspunkte
0
Ort
Berlin
Hallo alle zusammen!!! habe mal ne frage vielleicht kann mir ja jemand helfen!!!

ich möchte meine Excel-Tabelle schützen vor zweite bearbeitung!!!

das heißt die tabelle soll fortlaufend bearbeitet werden!

die einträge die getätigt wurden dürfen aber nicht mehr veränderbar sein!!!


wenn möglich immer nachdem man das dokument speichert!!!


hat da jemand ne idee wie man das machen könnte???


mit freundlichen grüßen

mario
 
  • #2
Hallo bbp1986,

kannst du es noch etwas genauer  beschreiben. Was soll erreicht werden werden ?

Vielleicht so ?

- dass ein User an einem Tag die Datei nur einmal ändern kann.
   -> beim Speichern feststellen, ob an diesem Datum schon eine
       Änderung durch diesen User stattfand.
      Wenn ja, Änderung abweisen
  -> beim Schliessen (mit vorheriger Änderung) Zeitstempel für
      diesen User vermerken

Gruß Matjes :)
 
  • #3
Hallo mario,

hab nach nochmaligem Lesen ist mir jetzt aufgegangen das es garnicht um User geht  ::)

Also du möchtest alles was in ein Tabellenblatt geschrieben und  gespeichert wurde vor Veränderung schützen.

Dann probier mal das folgende Makro aus.

Das Makro hat folgende Vorgehensweise:
- löscht den Blattschutz
- entsperrt alle Zelle
- speichert die Tabelle, damit ein eventuell zu groß geratener UsedRange wieder schrumpft
- sperrt alle Zellen des UsedRange
- setzt den Blattschutz

Den Blattnamen in der Konstanten cBLTNAME mußt du noch anpassen.
In der Konstanten pw kannst du bei Bedarf ein Paßwort eintragen.

Das Makro muß in der Code-Seite->DieseArbeitsmappe' liegen !

Gruß Matjes :)
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Const cBLTNAME = Tabellexyz-> zu schützendes Blatt
  Const pw =  ->hier ggf. PW für Blattschutz eintragen
  
  Dim ws As Worksheet
  
  On Error Resume Next
  Set ws = ThisWorkbook.Worksheets(cBLTNAME)
  Err.Clear: On Error GoTo 0
  If ws Is Nothing Then
    MsgBox Blatt  & cBLTNAME &  nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->Schreibschutz des Blattes entfernen
  ws.Activate
  On Error Resume Next
  ActiveSheet.Unprotect Password:=pw
  If Err.Number <> 0 Then
    MsgBox Blatt-Schutz konnte nicht entfernt werden.
    GoTo AUFRAEUMEN
  End If
  On Error GoTo 0
  
 ->alle Zellen entsperren
  ws.Cells.Locked = False
  
 ->Speichern (dabei events abschalten)
 ->UsedRange sperren
  Application.EnableEvents = False
  ThisWorkbook.Save
 ->bei leerem Blatt nichts sperren
  If ws.UsedRange.Count > 1 Then ws.UsedRange.Locked = True
  ThisWorkbook.Save
  Application.EnableEvents = True
  
 ->Blattschutz setzen
  ActiveSheet.Protect Password:=pw
  
 ->Speicherung abbrechen, da schon alles gespeichert ist,
 ->wenn nicht Speichern unter ...
  If Not SaveAsUI Then Cancel = True
AUFRAEUMEN:
  Set ws = Nothing
End Sub
 
  • #4
erstmal danke für deine aufwändige hilfe.... :1 :1 :1

es klappt leider nicht.... ich habe den von erstellten quellcode im macroeditor eingefügt den namen geändert in Tabelle 2 und dann bin ich auf speichern gegangen ... nichts passiert ... die exeldatei hat sich aufgehengt...

ich probier es nochmal...... :|

aber trotzdem danke für deine bemühungen....

mfg mario
 
  • #5
Wenn's nicht klappt, schick mir eine kleine Test-Datei. Dann schau ich mal, woran es liegt.

Gruß Matjes :)
 
  • #6
Also das Makro oben sperrt die Zellen des gesamten benutzten Bereichs eines Blattes, also auch leere Zellen.

Die nachfolgende Variante schützt nur alle ausgefüllen Zellen eines Blattes.
Jeweils anzupassende Konstanten sind gekennzeichnet.

Das Makro muß in der Code-Seite->DieseArbeitsmappe liegen.

Gruß Matjes :)
Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  
 -><<<<<<<<<< A N P A S S E N >>>>>>>>>>>>>>>>>>>>>>
  Const cBLTNAME = Tabelle1-> zu schützendes Blatt
  Const pw =  ->hier ggf. PW für Blattschutz eintragen
  
 ->zu Schützender Bereich ab Zeile.../Spalte...
  Const cZ_ERSTEWERTEZEILE = 3
  Const cSP_ERSTEWERTESPALTE = 2
 -><<<<<<<<<< A N P A S S E N   E N D E >>>>>>>>>>>>
  
  Dim ws As Worksheet
  Dim r As Range, Zelle As Range, ersteAdresse As String
  Dim lRows As Long, lCols As Long
  
  On Error Resume Next
  Set ws = ThisWorkbook.Worksheets(cBLTNAME)
  Err.Clear: On Error GoTo 0
  If ws Is Nothing Then
    MsgBox Blatt  & cBLTNAME &  nicht vorhanden.
    GoTo AUFRAEUMEN
  End If
  
 ->Schreibschutz des Blattes entfernen
  ws.Activate
  On Error Resume Next
  ActiveSheet.Unprotect Password:=pw
  If Err.Number <> 0 Then
    MsgBox Blatt-Schutz konnte nicht entfernt werden.
    GoTo AUFRAEUMEN
  End If
  On Error GoTo 0
  
 ->Bereich der zu schützenden Zellen setzen
  lRows = ws.UsedRange.Rows.Count + ws.UsedRange.Row - 1
  lCols = ws.UsedRange.Columns.Count + ws.UsedRange.Column - 1
  Set r = ws.Range( _
              ws.Cells(cZ_ERSTEWERTEZEILE, cSP_ERSTEWERTESPALTE), _
              ws.Cells(lRows, lCols))
  
 ->Zellen entsperren
  r.Locked = False
  
 ->alle nicht leeren Zellen (Werte, nicht Formeln) suchen und sperren
  With r
    Set Zelle = .Cells(1)
    Set Zelle = .Find(What:=*, _
                      After:=Zelle, _
                      LookIn:=xlValues, _
                      LookAt:=xlWhole, _
                      SearchOrder:=xlByRows, _
                      SearchDirection:=xlNext, _
                      MatchCase:=False)
    If Not Zelle Is Nothing Then
      ersteAdresse = Zelle.Address
        Do
          Zelle.Locked = True
          Set Zelle = .FindNext(Zelle)
          If Zelle Is Nothing Then Exit Do
          If Zelle.Address = ersteAdresse Then Exit Do
        Loop
    End If
  End With
  
 ->Blattschutz setzen
  ActiveSheet.Protect Password:=pw
  
AUFRAEUMEN:
  Set ws = Nothing: Set r = Nothing: Set Zelle = Nothing
End Sub
 
  • #7
Und jetzt noch eine Passwort-geschützte Entsperrfunktion.

Makro muß in der Code-Seite des Tabellenblattes liegen.
Anzupassende Konstanten sind gekennzeichnet.

Funktion:
Ein Doppelklick auf eine gesperrt Zelle ruft eine PW-Abfrage auf.
PW momentan xyz
wird die richtig beantwortet, werden alle Zellen dieser Zeile entsperrt.

Gruß Matjes :)
Code:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
  
 -><<<<<<<<<<<<< A N P A S S E N >>>>>>>>>>
  Const cENTSPERRPASSWORT = xyz
  Const pw =  ->hier ggf. PW für Blattschutz eintragen
 -><<<<<<<<<<<<< A N P A S S E N   E N D E >>>>>>>>>>
  
  Dim sPW As String
  
  If Target.Count = 1 Then
    If Target.Locked Then
      sPW = InputBox( _
            Bitte geben Sie das Paßwort zum entsperren der Zeile ein., _
            Zeile entsperren, )
      If sPW <> cENTSPERRPASSWORT Then
        If sPW <>  Then MsgBox Passwort falsch :-)
        Cancel = True
      Else
       ->Schreibschutz des Blattes entfernen
        On Error Resume Next
        Target.Parent.Unprotect Password:=pw
        If Err.Number <> 0 Then
          MsgBox Blatt-Schutz konnte nicht entfernt werden.
          Cancel = True
          Exit Sub
        End If
        On Error GoTo 0
        Target.EntireRow.Locked = False
        
       ->Blattschutz setzen
        Target.Parent.Protect Password:=pw
      End If
    End If
  End If
End Sub
 
  • #8
DANKE DANKE DANKE Matjes bist echt nen voll profi!!!! :) :) :) mml mml mml

Es ist gut das es noch so hilfsbereite menschen gibt!!! :1 :1 :1 :1

mit freundlichen grüßen

mario
 
Thema:

Excel-Tabelle schützen vor zweite Bearbeitung

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben