2.9k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hi,

will mich ein wenig mit VBA befassen, da ich mir für die Arbeit ein paar Hilfen programmieren will. Momentan möchte ich, dass die Standardaktion, welche durch die ENTER-Taste ausgelöst wird (also bei Drücken eine Zeile runter), überschreiben. Das heißt, dass er beim Drücken der ENTER-Taste eine komplett neue Zeile einfügen soll (das soll noch weiter ausgebaut werden).

Folgenden Code verwende ich :

DieseArbeitsmappe:

Option Explicit

Private Sub Workbook_Open()
ZeileEinfügen
End Sub


Modul1:


Option Explicit

Private Sub onEnter()
MsgBox ""
End Sub


Public Sub ZeileEinfügen() ' Zeile per Tastendruck einfügen
Application.OnKey "{ENTER}", "onEnter"
End Sub


allerdings passiert beim drücken der ENTER-Taste nicht das, was ich im Quellcode angegeben habe, sondern nur das durch EXCEL bereits vorgegebene.

Kann mir jemand sagen woran das liegt?

12 Antworten

0 Punkte
Beantwortet von
Hi,
und warum machst du das nicht über ein Makro, idem du die einzelnen Schritte aufzeichnest und bei Gebrauch über das Makro ausführen lässt?
0 Punkte
Beantwortet von
Es soll direkt über die Eingabetaste gesteuert werden. Soweit ich weiß, kann man Ereignisse nicht aufzeichnen.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Versuch mal {RETURN} statt {ENTER}

{ENTER} = Taste auf dem Num-Pad
{RETURN} = Taste auf der 'normalen' Tastatur
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

schau mal hier nach: OnKey.

Danach ist für die Entertaste die Tilde einzugeben.
Application.OnKey "{ENTER}" spricht danach die Enter-Taste auf dem Ziffernfeld an.

Gruß

M.O.
0 Punkte
Beantwortet von
hat super geklappt, danke ;)
0 Punkte
Beantwortet von
Hi Leute,

habe noch eine weitere Frage bezüglich der Verknüpfung OnKey-SendKeys:

also, über


Private Sub Worksheet_Change(ByVal Target As Range)
Application.OnKey "{RETURN}", "insertRow"
End Sub


rufe ich ja die Funktion
insertRow()
auf.

In dieser wiederrum möchte ich, dass er automatisch die Tastenkombination ALT+RETURN aufruft.

Meine Funktion sieht daher so aus:


Option Explicit

Public Sub insertRow()
SendKeys "%{RETURN}"
End Sub


immer wenn ich die RETURN-Taste drücke, gibt er mir die Fehlermeldung: "Ungültiger Prozeduraufruf oder ungültiges Argument" aus.

Kann man etwa OnKey mit SendKeys nicht verwenden oder habe ich noch was anderes falsch gemacht
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

probier mal den folgenden Befehl:

Application.SendKeys "%{RETURN}"


Du könntest das aber auch so lösen:

Sub Umbruch()

ActiveCell = ActiveCell & vbLf

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hi,

hat alles gut geklappt, danke. Allerdings habe ich noch eine letzte Frage. Ich erkläre mal kurz was ich vorhabe:

Das Skript will ich dazu benutzen, dass wenn jemand die RETURN-Taste drückt und bereits Text eingegeben hat, einen Zeilenumbruch erwirkt (wie bei Drücken von ALT+RETURN). Dennoch bleibt der eingegebene Text nicht stehen sobald ich nach dem Zeilenumbruch einen neuen eingebe. Ich gehe mal davon aus dass das daran liegt, weil ja das Skript bei jedem Drücken auf RETURN erneut ausgeführt wird.

Ich muss also eine Möglichkeit haben, den vorherigen Text so stehen zu lassen ohne dass er bei einer Neueingabe gelöscht wird.
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo,

probier mal das folgende Makro:

Sub insertRow()

ActiveCell = ActiveCell & vbLf
Application.SendKeys ("{f2}")

End Sub



Gruß

M.O.
0 Punkte
Beantwortet von
Wunderbar, genau so solls sein ;). Was genau bewirkt {f2}?
...