Supportnet / Forum / Tabellenkalkulation
Kopierschutz bei einem ExcelSheet
Frage
Wie kann ich ExcelSheet so schützen, dass die Zellinhalte nicht einfach in ein anderes Sheet kopiert werden können.
Antwort 1 von sicci
Hallo Lasso,
Leider gibt es bei Excel keinen integrierten Kopierschutz. Dennoch kann man über VBA einen nur von Kennern knackbaren, also einigermaßen wirksamen Schutz basteln.
Ein Beispiel maile ich Dir zu.
Die Bedingungen und Makros hier auch für alle Mitleser:
Man braucht:
1. Ein Eröffnungsblatt mit z.B folgendem Text: "Datei nur einsehbar, wenn Makros aktiviert sind - bitte im Menu Extras/Optionen/Allgemein ein Häkchen
bei "Makrovirusschutz" setzten, Mappe schließen und bei nochmaligem Öffnen
in der Startmeldung "Makros aktivieren". (Name des Blattes hier im Beispiel: "Fehlermeldung")
2. Ein oder mehr weitere Blätter mit den eigentlichen Daten. Im Beispiel hier
gibt es nur ein weiteres Blatt "Sensible Daten".
3. Drei Makros
Erläuterungen zu den Makros:
1. Before_Close-Makro
(im Klassenmodul: ´Diese Arbeitsmappe´) setzt alle Kopier-Funktionen auf
"True" = möglich und blendet das Blatt "sensible Daten" aus (xlVeryhidden),
so daß es nicht mehr gesehen oder aktiviert werden kann.
Damit ist das Fehlermeldungs-Blatt das einzig aktivierbare(und sichtbare), wenn die Mappe geöffnet wird.
Wird sie jedoch mit "Makros aktivieren" geöffnet startet das
2. Workbook_Open-Makro
(im Klassenmodul: ´Diese Arbeitsmappe´), setzt das "Sensible Daten"-Blatt auf ´xlVisible´, das "Fehlermeldungs"-Blatt auf ´xlVeryHidden´ und deaktiviert alle Kopierfunktionen.
3. Auto_Close-Makro
(in einem allgemeinen Modul) deaktiviert Speichern-Abfrage und Speicherung beim Schließen der Datei, so daß evtll. am Blatt vorgenommene Änderungen nicht gespeichert werden.
Hier die Makros:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim x%
With Sheets("Fehlermeldung")
.Visible = True
.Protect "Uups"
End With
Sheets("Sensible Daten").Visible = xlveryhidden
With Application
.CommandBars("Cell").Enabled = True
.CommandBars("Edit").Controls("&Kopieren").Enabled = True
On Error Resume Next
For x = 1 To CommandBars.Count
.CommandBars(x).Controls("&Kopieren").Enabled = True
Next x
.OnKey ("^" & "c"), ""
.CutCopyMode = True
End With
End Sub
Private Sub Workbook_Open()
Dim x%
Sheets("Sensible Daten").Visible = True
Sheets("Fehlermeldung").Visible = xlveryhidden
With Application
.CommandBars("Cell").Enabled = False
.CommandBars("Edit").Controls("&Kopieren").Enabled = False
On Error Resume Next
For x = 1 To Application.CommandBars.Count
.CommandBars(x).Controls("&Kopieren").Enabled = False
Next x
.OnKey ("^" & "c"), ""
.CutCopyMode = False
End With
End Sub
Sub Auto_Close()
Application.DisplayAlerts = False
ActiveWorkbook.Close False
End Sub
Viel Erfolg!
Gruß
sicci
Leider gibt es bei Excel keinen integrierten Kopierschutz. Dennoch kann man über VBA einen nur von Kennern knackbaren, also einigermaßen wirksamen Schutz basteln.
Ein Beispiel maile ich Dir zu.
Die Bedingungen und Makros hier auch für alle Mitleser:
Man braucht:
1. Ein Eröffnungsblatt mit z.B folgendem Text: "Datei nur einsehbar, wenn Makros aktiviert sind - bitte im Menu Extras/Optionen/Allgemein ein Häkchen
bei "Makrovirusschutz" setzten, Mappe schließen und bei nochmaligem Öffnen
in der Startmeldung "Makros aktivieren". (Name des Blattes hier im Beispiel: "Fehlermeldung")
2. Ein oder mehr weitere Blätter mit den eigentlichen Daten. Im Beispiel hier
gibt es nur ein weiteres Blatt "Sensible Daten".
3. Drei Makros
Erläuterungen zu den Makros:
1. Before_Close-Makro
(im Klassenmodul: ´Diese Arbeitsmappe´) setzt alle Kopier-Funktionen auf
"True" = möglich und blendet das Blatt "sensible Daten" aus (xlVeryhidden),
so daß es nicht mehr gesehen oder aktiviert werden kann.
Damit ist das Fehlermeldungs-Blatt das einzig aktivierbare(und sichtbare), wenn die Mappe geöffnet wird.
Wird sie jedoch mit "Makros aktivieren" geöffnet startet das
2. Workbook_Open-Makro
(im Klassenmodul: ´Diese Arbeitsmappe´), setzt das "Sensible Daten"-Blatt auf ´xlVisible´, das "Fehlermeldungs"-Blatt auf ´xlVeryHidden´ und deaktiviert alle Kopierfunktionen.
3. Auto_Close-Makro
(in einem allgemeinen Modul) deaktiviert Speichern-Abfrage und Speicherung beim Schließen der Datei, so daß evtll. am Blatt vorgenommene Änderungen nicht gespeichert werden.
Hier die Makros:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim x%
With Sheets("Fehlermeldung")
.Visible = True
.Protect "Uups"
End With
Sheets("Sensible Daten").Visible = xlveryhidden
With Application
.CommandBars("Cell").Enabled = True
.CommandBars("Edit").Controls("&Kopieren").Enabled = True
On Error Resume Next
For x = 1 To CommandBars.Count
.CommandBars(x).Controls("&Kopieren").Enabled = True
Next x
.OnKey ("^" & "c"), ""
.CutCopyMode = True
End With
End Sub
Private Sub Workbook_Open()
Dim x%
Sheets("Sensible Daten").Visible = True
Sheets("Fehlermeldung").Visible = xlveryhidden
With Application
.CommandBars("Cell").Enabled = False
.CommandBars("Edit").Controls("&Kopieren").Enabled = False
On Error Resume Next
For x = 1 To Application.CommandBars.Count
.CommandBars(x).Controls("&Kopieren").Enabled = False
Next x
.OnKey ("^" & "c"), ""
.CutCopyMode = False
End With
End Sub
Sub Auto_Close()
Application.DisplayAlerts = False
ActiveWorkbook.Close False
End Sub
Viel Erfolg!
Gruß
sicci
Antwort 2 von sicci
.. sowas, hat sich doch ein Fehler eingeschlichen!
im Auto_Open muß es natürlich:
Close True heißen
sonst wird das "Fehlermeldung"sblatt nicht aktiviert.
Im Workbook_Open sollte deshalb dem Sensibel-Blatt mit sheets("Sensible Daten").protect "sensibel" ein Schreibschutz verpaßt werden.
Gruß
sicci
im Auto_Open muß es natürlich:
Close True heißen
sonst wird das "Fehlermeldung"sblatt nicht aktiviert.
Im Workbook_Open sollte deshalb dem Sensibel-Blatt mit sheets("Sensible Daten").protect "sensibel" ein Schreibschutz verpaßt werden.
Gruß
sicci
Antwort 3 von sicci
nein, ich bin (noch) nicht besoffen ..
also: im Auto_Close ... Close True
und im Workbook_Open den Schreibschutz
Jeden weitren Fehler werd ich jetzt ignorieren ;-)
also: im Auto_Close ... Close True
und im Workbook_Open den Schreibschutz
Jeden weitren Fehler werd ich jetzt ignorieren ;-)
Antwort 4 von Lasso
Danke ich werde das mal versuchen

