| home |  
  

   © 2005 by Friedel Schmidt •  friedel.schmidt @ peco-web.de  •                      Top  

   | impressum | feedback | home |  


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.