Hallo allerseits,
folgende Situation:
mein blattgeschütztes Sheet soll durch den DAU (Dümmster Anzunehmender User) benutzbar sein. Dieser soll in einem Bericht seine Arbeitszeit in Tagen angeben, welche in 0,25-er Taktung einzutragen sind. Zulässig ist also "0,25", "0,50", "0,75" und "1,00".
Ein kleines Makro prüft dabei, ob die tägliche Einsatzzeit den Wert von 1,00 überschreitet. Ist das der Fall, wird die letzte Eingabe per .Undo rückgängig gemacht und eine kleine Meldung erscheint. Über eine Liste in der Datenüberprüfung können auch keine abweichenden Eingaben (wie "0,15") getätigt werden. Soweit so gut.
Leider wäre der DAU kein DAU, wenn er nicht versuchen würde, genau diese sinnvolle Fehlerroutine zu umgehen. Ich habe also dafür gesorgt, dass er Makros nicht abschalten kann (bis auf den nur wenigen DAUs bekannten Entwicklermodus). Was könnte ein DAU noch versuchen? CopyPaste! Also gut: Per Workbook-Module sämtliche Kopier-Methoden abgeschaltet. Strg-C ist so tot wie Drag'n'Drop oder Autofill. Klappt super. Fast.
Denn leider ist eine Funktion nach wie vor prächtig praktisch nutzbar: Der Füllbereich im START-Ribbon.
Daher die Frage: Wie schalte ich den per VBA ab?
Anmerkung: Application.CellDragAndDrop = False funktioniert hierfür genauso wenig wie Application.CutCopyMode = False
Diese habe ich beide schon in meinem Code eingebaut.Ich hänge diesen einfach mal an. Sämtlicher Code wird im Workbook-Modul eingefügt:
Private Sub Workbook_Activate()
Application.CutCopyMode = False
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_Deactivate()
Application.CellDragAndDrop = True
Application.OnKey "^c"
Application.CutCopyMode = False
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CutCopyMode = False
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CellDragAndDrop = True
Application.OnKey "^c"
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
MsgBox "Das Kontextmenü wurde deaktiviert." & vbCrLf & "Kopieren oder ''drag & drop'' funktioniert nicht.", 16, "In der gesamten Arbeitsmappe:"
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.OnKey "^c", ""
Application.CellDragAndDrop = False
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Die Private Sub Workbook_SheetBeforeRight ist bei mir mittels Kommentar ausgeklammert, da mit dem Rechtsklick trotzdem kein Code eingefügt werden kann. Sobald man die ausgewählte Zelle ändert, ist ein Einfügen nicht mehr möglich...
Cheers, Foley
|