Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

worksheet_change, onkey, Protokollierung Userdaten

worksheet_change, onkey, Protokollierung Userdaten
27.06.2013 20:07:44
kommemitmeinemsmartphonenichtklar
Salve,
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

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das müsstest du eigentlich alles lassen ...
28.06.2013 00:10:48
Luc:-?
…können, Nicht-Klar-Kommer,
wenn du vor dem Undo noch die Bewegungsrichtung des Cursors aus der Original-Nutzer-Eingabe feststellst, was kürzlich der Wunsch eines Fragestellers war.
Dieser Beitrag dort könnte dir weiterhelfen, indem du noch das zugehörige Worksheet_SelectionChange-Ereignis auswertest. Wird aber alles etwas komplexer als dort.
Falls du mit dem Umbauen dieses Ansatzes nicht klar kommen solltest, teile das mit. Mir/uns wird dann schon was einfallen.
Gruß Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige