Inhaltsverzeichnis
nach Alphabet
nach Rubriken
Suchen
Links
|
|
Ausschneiden, Kopieren und Einfügen verhindern
Versionen: Excel 2003
Versionen Excel 97, 2000 und 2002/XP siehe Nachtrag
Sicher haben Sie, aus welchem Grund auch immer, schon das ein oder andere Mal daran gedacht die Funktionen zum Ausschneiden, Kopieren und / oder Einfügen zu deaktivieren. Um allerdings sämtliche Möglichkeiten zu unterbinden müssten die Menüleiste, das Kontextmenü und die Symbolleisten angepasst sowie die diversen Tastenkombinationen deaktiviert werden - was ein Aufwand! Und vor allem: Wie geht das?
Mit den nachfolgenden Prozeduren gelingt das ohne großen Aufwand:
Sub CutCopyOff()
CutCopyOnOff 19, False 'Menübefehl "Kopieren"
CutCopyOnOff 21, False 'Menübefehl "Ausschneiden"
CutCopyOnOff 22, False 'Menübefehl "Einfügen"
CutCopyOnOff 755, False 'Menübefehl "Inhalte einfügen"
Application.OnKey "^c", "" 'Kopieren mit "Strg + C"
Application.OnKey "^x", "" 'Ausschneiden mit "Strg + X"
Application.OnKey "^v", "" 'Einfügen mit "Strg + V"
Application.OnKey "^{INSERT}", "" 'Kopieren mit "Strg + Einfg"
Application.OnKey "+{DEL}", "" 'Ausschneiden mit "Umsch + Entf"
Application.OnKey "+{INSERT}", "" 'Einfügen mit "Umsch + Einfg"
Application.CellDragAndDrop = False 'Ziehen mit der Maus
End Sub
Sub CutCopyOn()
CutCopyOnOff 19, True
CutCopyOnOff 21, True
CutCopyOnOff 22, True
CutCopyOnOff 755, True
Application.OnKey "^c"
Application.OnKey "^x"
Application.OnKey "^v"
Application.OnKey "^{INSERT}"
Application.OnKey "+{DEL}"
Application.OnKey "+{INSERT}"
Application.CellDragAndDrop = True
End Sub
Sub CutCopyOnOff(Id As Variant, AnAus As Boolean)
Dim cb As CommandBar
Dim ctl As CommandBarControl
For Each cb In Application.CommandBars
Set ctl = cb.FindControl(Id:=Id, Recursive:=True)
If Not ctl Is Nothing Then ctl.Enabled = AnAus
Next
End Sub
Die Prozedur "CutCopyOff" deaktiviert mit Hilfe der Prozedur "CutCopyOnOff" die Menübefehle Kopieren, Ausschneiden, Einfügen und Inhalte einfügen. Die Befehle werden dabei auch in den Kontextmenüs abgeschaltet. Danach widmet sich die Prozedur den Tastenkombinationen für die Einfüge-und Kopierbefehle (Strg+C, Strg+X, Strg+V usw.). Die OnKey-Methode mit dem "leeren" zweiten Parameter deaktiviert die Tastenkombinationen. Zum Schluss verhindert die Anweisung "Application.CellDragAndDrop = False" das Ziehen & Ablegen mit der Maus.
Die Prozedur "CutCopyOn" schaltet die verschiedenen Kopiermethoden wieder ein.
Um zu gewährleisten das diese Einschränkungen nur in der gewünschten Arbeitsmappe gelten und beim Aktivieren anderer Mappen dort wieder zur Verfügung stehen ist noch ein wenig Code notwendig.
Dazu im Projekt-Explorer des VB-Editors im VBA-Projekt der aktuellen Arbeitsmappe auf das Element "DieseArbeitsmappe" doppelklicken. Daraufhin öffnet sich ein weiteres Codefenster mit dem Titel " - Diese Arbeitsmappe (Code)". Dort nun den nachfolgenden Code hineintippen oder -kopieren:
Private Sub Workbook_Activate()
CutCopyOff
End Sub
Private Sub Workbook_Deactivate()
CutCopyOn
End Sub
Damit werden die Prozeduren zum Ein- oder Ausschalten der Kopierfunktionen über die Aktivier- und Deaktivier-Ereignisse der Arbeitsmappe aufgerufen. Nun kann man problemlos in andere Excel-Dateien wechseln und dort wie gewohnt mit Strg+C, Bearbeiten-Kopieren oder den anderen Shortcuts und Befehlen arbeiten. Erst bei der Rückkehr zur "eingeschränkten" Arbeitsmappe verlieren die Shortcuts und Befehle wieder ihre Funktion. Dies funktioniert auch beim nächsten Öffnen der Arbeitsmappe.
Die Aktivierung der Ausführung von Makros ist allerdings Voraussetzung!
Diese Einschränkungen können, anstatt auf die gesamte Arbeitsmappe, auch auf ein oder mehrere Tabellenblätter beschränkt werden.
Dazu im Projekt-Explorer des VB-Editors im VBA-Projekt der aktuellen Arbeitsmappe auf das Element "Tabelle1" doppelklicken. Daraufhin öffnet sich ein weiteres Codefenster mit dem Titel " - Tabelle1 (Code)". Dort nun den lediglich etwas abgeänderten Code hineintippen oder -kopieren:
Private Sub Worksheet_Activate()
CutCopyOff
End Sub
Private Sub Worksheet_Deactivate()
CutCopyOn
End Sub
Auch damit werden die Prozeduren zum Ein- oder Ausschalten der Kopierfunktionen über die Aktivier- und Deaktivier-Ereignisse der Arbeitsmappe aufgerufen - aber nur für die einzelnen Arbeitsmappenblätter. Nun kann man problemlos in andere Arbeitsmappenblätter wechseln und dort wie gewohnt mit Strg+C, Bearbeiten-Kopieren oder den anderen Shortcuts und Befehlen arbeiten. Erst bei der Rückkehr zum "eingeschränkten" Arbeitsmappenblatt verlieren die Shortcuts und Befehle wieder ihre Funktion. Dies funktioniert auch beim nächsten Öffnen der Arbeitsmappe.
Der Code darf dann natürlich nicht mehr im Element "DieseArbeitsmappe" stehen da sonst logischerweise die gesamte Arbeitsmappe betroffen ist!
Nachtrag zu den Versionen Excel 97, 2000 und 2002/XP
Da mir zurzeit nur XL 2003 zur Verfügung steht, konnte ich dies nicht für die vorgenannten Versionen testen.
Mit kleinen Veränderungen sollte es auch in diesen Versionen funktionieren. Hierzu die Anpassungen in den beiden nachfolgenden Prozeduren übernehmen:
Sub CutCopyOff()
CutCopyOnOff 19, False 'unverändert
CutCopyOnOff 21, False 'unverändert
CutCopyOnOff 22, False 'unverändert
CutCopyOnOff 755, False 'unverändert
Application.OnKey "^c", "" 'unverändert
Application.OnKey "^x", "" 'unverändert
Application.OnKey "^v", "" 'unverändert
Application.OnKey "^\{INSERT\}", "" 'angepasst
Application.OnKey "+\{DEL\}", "" 'angepasst
Application.OnKey "+\{INSERT\}", "" 'angepasst
Application.CellDragAndDrop = False 'unverändert
End Sub
Sub CutCopyOn()
CutCopyOnOff 19, True
CutCopyOnOff 21, True
CutCopyOnOff 22, True
CutCopyOnOff 755, True
Application.OnKey "^c"
Application.OnKey "^x"
Application.OnKey "^v"
Application.OnKey "^\{INSERT\}" 'angepasst
Application.OnKey "+\{DEL\}" 'angepasst
Application.OnKey "+\{INSERT\}" 'angepasst
Application.CellDragAndDrop = True
End Sub
Wie bereits gesagt - getestet habe ich dies nicht!
Ach ja, da sollte man noch was tun - damit auch die einzelnen Arbeitsmappenblätter nicht kopiert werden können
... denn trotz der bisherigen Maßnahmen ist es immer noch möglich die einzelnen Arbeitsblätter in andere Arbeitsmappen zu kopieren (Rechtsklick auf das Blattregister der Arbeitsmappe, im Kontextmenü "Verschieben/kopieren…" usw.).
Dies kann verhindert werden indem der Arbeitsmappenschutz aktiviert wird:
Extras - Schutz - Arbeitsmappe schützen…
… optional mit Kennwort schützen - das war's.
|