Makro aufrufen, wenn Cursor in einer Zelle steht

Hallo,

gelegentlich möchte ich einen Makro (über eine Taste, der dieser zugeordnet ist) aktivieren, wenn ich etwas in eine Zelle eintragen, dieses Eintragen aber noch nicht abgechlossen habe, d.h. die Schreibmarke noch in der Zelle bzw. oben in der Editierzeile steht. Das geht dann nicht, der akro reagiert infach nicht.

Geht das überhaupt?

Danke,
Laika

gelegentlich möchte ich einen Makro (über eine Taste, der
dieser zugeordnet ist) aktivieren, wenn ich etwas in
eine Zelle eintragen, dieses Eintragen aber noch nicht
abgechlossen habe, d.h. die Schreibmarke noch in der Zelle
bzw. oben in der Editierzeile steht. Das geht dann nicht, der
akro reagiert infach nicht.
Geht das überhaupt?

Hi Laika,

ob es geht, jain, liegt auch daran was man letztlich an Funktionalität möchte.

Ist schon länger her daß ich da mal rumprobierte und der damalige Code ist im Festplattennirwana :frowning:

Soweit ich noch weiß, kann mich auch irren, probierte ich es über application.onkey und wies jeder Taste ein Makro zu, ich glaube das gleiche Makro, dann wurde application.caller ausgewertet.
Alternativ hatte ich da eine API-Funktion „GetAsciiKey“ o.ä. die Tatstatureingaben auswertete.

Einiges klappte erstaunlich gut, anderes war sehr schwierig, z.B. wieder mit dem Cursor wieder mit den gleichen Einstellungen an die gleiche Stelle zurückzukehren, wo man eben noch am Eintragen war.

Gruß
Reinhard

Hallo Reinhard,

Alternativ hatte ich da eine API-Funktion „GetAsciiKey“ o.ä.
die Tatstatureingaben auswertete.

die kenne ich nicht, in der API-Guide steht die auch nicht. Meinst Du eventuell GetAsyncKeystate? (Code aus API-Guide)

Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Function GetPressedKey() As String
 For Cnt = 32 To 128
 If GetAsyncKeyState(Cnt) 0 Then
 GetPressedKey = Chr$(Cnt)
 Exit For
 End If
 Next Cnt
End Function

Gruß, Rainer

Alternativ hatte ich da eine API-Funktion „GetAsciiKey“ o.ä.
die Tatstatureingaben auswertete.

die kenne ich nicht, in der API-Guide steht die auch nicht.
Meinst Du eventuell GetAsyncKeystate? (Code aus API-Guide)

Hallo Rainer,

ich habe den Namen „GetAsciiKey“ beim Schreiben „erfunden“.
Wie es genau heißt weiß ich nicht, aber ich glaube zu wissen als 2ten und 3ten Parameter konnte man noch auswerten ob Shift, Ctrl gedrückt wurde.
Durch Einbindung dieser API Funktion wußte man genau welche Tastenkombination gedrückt wurde und konnte daraufhin eine Prozedur aufrufen.
Das war einfach.
Schwierig bis unlösbar war, dann im aufgerufenen Makro festzuhalten in welchem Eingabezustand man gerade war als diese Tastenkombination gedrückt wurde, ein zweites Makro zu starten und dann wieder zum Ausgangspunkt zurückzukehren, quasi so als ob nichts geschehen wäre.
Gruß
Reinhard

Hallo Reinhard,

ich habe den Namen „GetAsciiKey“ beim Schreiben „erfunden“.
Wie es genau heißt weiß ich nicht, aber ich glaube zu wissen
als 2ten und 3ten Parameter konnte man noch auswerten ob
Shift, Ctrl gedrückt wurde.

Ja, das geht mit GetAsyncKeystate. Du kannst auch verschiedene Tasten gleichzeitig auswerten. Das ist keine reaktion auf einen Tastendruck, sondern eine Prüfung einer bestimmten Taste, ob die frei ist, gedrückt wurde oder gehalten wird. Asynchron, weil die Prüfung auch noch erfolgreich verläuft, wenn geprüft wird und die Taste inzwischen schon wieder los gelassen wurde.

Durch Einbindung dieser API Funktion wußte man genau welche
Tastenkombination gedrückt wurde und konnte daraufhin eine
Prozedur aufrufen.

Ja, geht hier.

Das war einfach.
Schwierig bis unlösbar war, dann im aufgerufenen Makro
festzuhalten in welchem Eingabezustand man gerade war als
diese Tastenkombination gedrückt wurde, ein zweites Makro zu
starten und dann wieder zum Ausgangspunkt zurückzukehren,
quasi so als ob nichts geschehen wäre.

Aha, das habe ich noch nicht versucht, stelle ich mir gar nicht so schwer vor. Nur Datenintensiv, weil man ja ständig den Zustand speichern muss.

Ich habe mit der Funktion mal ein Spiel für meine Jungs geschrieben, bei dem ein Auto mit den Cursortasten gesteuert wurde. Auf/ab - Gas und Bremse, rechts/links - Lenkung. Das muss ja auch gleichzeitig gehen, außer gleichzeitig rechts und links lenken. :smile: Das klappt mit GetAsyncKeystate(Key) Bestens und ist ganz einfach.

Gruß, Rainer

Schwierig bis unlösbar war, dann im aufgerufenen Makro
festzuhalten in welchem Eingabezustand man gerade war als
diese Tastenkombination gedrückt wurde, ein zweites Makro zu
starten und dann wieder zum Ausgangspunkt zurückzukehren,
quasi so als ob nichts geschehen wäre.

Aha, das habe ich noch nicht versucht, stelle ich mir gar
nicht so schwer vor. Nur Datenintensiv, weil man ja ständig
den Zustand speichern muss.

ich finde es schwer, schau mal hier:
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…

ich habe da schon einiges probiert, aber kam noch zu keiner Lösung.
Was ich auch probiere, ich komme nicht rein in den Eingabemodus und auch nicht raus. Über ein Makro. Manuell geht alles, aber ich kann es nicht nachstellen per Makro.

Sobald Excel im Eingabemodus z.B. eines Textfeldes ist klappen Tastureingaben-Makros nicht mehr.

Ich habe mit der Funktion mal ein Spiel für meine Jungs
geschrieben, bei dem ein Auto mit den Cursortasten gesteuert
wurde. Auf/ab - Gas und Bremse, rechts/links - Lenkung. Das
muss ja auch gleichzeitig gehen, außer gleichzeitig rechts und
links lenken. :smile: Das klappt mit GetAsyncKeystate(Key) Bestens
und ist ganz einfach.

Ja, das geht ja, aber nicht wenn Excel die Tastatureingaben ignoriert.

Gruß
Reinhard

Hallo Reinhard,

Was ich auch probiere, ich komme nicht rein in den
Eingabemodus und auch nicht raus. Über ein Makro. Manuell geht
alles, aber ich kann es nicht nachstellen per Makro.

Sobald Excel im Eingabemodus z.B. eines Textfeldes ist klappen
Tastureingaben-Makros nicht mehr.

ja, Excel und die Unterschiede zu VB6. :smile: Über die API könnte ich Dir etwas erzählen, bei Excel frage ich dann doch lieber Dich. :smile:

Gruß, Rainer