worksheet_change, onkey, Protokollierung Userdaten
27.06.2013 20:07:44
kommemitmeinemsmartphonenichtklar
ich habe eine Protokollierung erstellt, die in einer gemeinsam genutzten Datei helfen soll, Änderungen besser nachzuvollziehen. Funktioniert alles soweit ganz gut. Jetzt gibt es zwei Probleme:
Usability:
Die Variablen betanke ich aus workbooksheet_change mit
neuerWert=target.value
application.undo
alterWert=target.value
Dann muss der neue Wert wieder in target, also target.value=neuerWert.
Funktioniert alles prima. Das Usabilityproblem ist, dass nach der Änderung die geänderte Zelle markiert bleibt, da sie zuletzt selektiert wurde, um neuerWert einzutragen. Als Workaround habe ich target.offset (0,1) genommen. Jetzt ist es aber so, dass der User nachdem er den Zelleintrag vorgenommen hat, gewöhnlicherweise mit Enter oder Tab oder Shift Tab drückt, um weiter zu springen. Entsprechend müsste ich jetzt differenzieren wohin der Cusor springen soll nach dem Durchlaufen der Prozedur.
Und dazu fällt mir keine Lösung ein. Ich habe eine ganze Weile mit onKey experimentiert. Nachteil ist, dass das onKey anscheinend global mind. auf Worksheet-Ebene definiert werden muss. Das heißt, er würde das Makro immer nach Druck auf Enter abfahren, auch wenn kein worksheet_change event eingetreten ist. Da aber die Anweisung, was passieren soll aus dem workbook_change event kommt, passiert nichts.
Bisheriger Ansatz am Beispiel für "enter":
Private Sub Workbook_Open()
Application.OnKey "{ENTER}", "recordEnterKeypress"
Public enterwaspressed as boolean
Modul 1:
Sub recordEnterKeypress()
enterWasPressed = True
End Sub
in Workbook_sheetchange:
...
If enterWasPressed then
target.offset (0,1)
end if
enterWasPressed = False
...
Das würde funktionieren, hat aber den Nachteil, dass man dann nicht mehr mit Enter normal navigieren kann sondern ohne workbook_change event Enter dann ein Zombiedasein führt.
Ich bin für Lösungsvorschläge offen :-)
2. Problem: Ich habe durch das ganze Rumexperimentieren geschafft, sowohl Tab als auch Shift+Tab bei Start der Datei zu deaktivieren. Obwohl alle onkey-Definition auskommentiert sind und ich diese auch im Direktfenster vor dem Schließen noch einmal manuell abgemeldet habe, ist die Tab-Taste nach dem Neustart tot. Wechsel ich manuell das Tabellenblatt funktioniert sie wieder einwandfrei (versuche ich das per VBA (sheets("Tabelle1").activate..., mit sendkeys habe ich es auch probiert) ist es ohne Effekt). Genauso wenn einmal das worksheet_change Ereignis aufgerufen wurde, bspw. durch f2 in Zelle. Ursache trotzt längerer Recherche unklar. Der Code unterscheidet sich nicht von den anderen onKey-Definitionen. Rüberkopieren in eine neue Datei hat auch nichts gebracht. Öffne ich eine leere neue Datei, funktioniert alles tadellos.
Ich bin ra(s)tlos....tausend Dank im Voraus für sachdienliche Hinweise
https://www.herber.de/bbs/user/86093.xlsm