Registriert seit: 30.10.2014
Version(en): 2013
Hallo,
zwecks besserem VBA Verständnis möchte ich gern folgendes wissen.
Wenn ich innerhalb einer Userform solchen Code habe:
Code:
Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
.
End Sub
wie könnte ich innerhalb einer anderen Prozedur, Funktion etc. ein solches TextBox-KeyDown Prozedur aufrufen. Wie übergebe ich einen entsprechenden KeyCode?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hallo!
Prinzipiell so:
Aus einem allgemeinen Modul heraus:
Code:
Sub Test()
Call UserForm1.TextBox1_KeyDown(99, False)
End Sub
Die Übergabe des kleinen c dürfte allerdings tatsächlich nur simuliert werden, so dass sich mir der Sinn nicht erschließt.
Gruß, Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
05.12.2014, 08:44
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2014, 08:56 von RPP63.)
Hi!
Mal ein praktisches Beispiel:
Die "Rechtsklick"-Taste zwischen Alt Gr und Strg rechts simuliert einen Rechtsklick auf die aktive Zelle.
Die Tastatur sendet die Tastenkombination Umsch+F10.
Das Worksheet_BeforeRightClick-Ereignis wird jedoch nicht ausgelöst!
Um dennoch damit arbeiten zu können, wird die Tastenkombi mittels SendKey-Methode einem Makro zugeordnet:
Tabelle1:
Code:
Private Sub Worksheet_Activate()
Application.OnKey "+{F10}", "RechtsKlickErsatz"
End Sub
Private Sub Worksheet_Deactivate()
Application.OnKey "+{F10}"
End Sub
allg. Modul:
Code:
Sub RechtsKlickErsatz()
Call Tabelle1.Worksheet_BeforeRightClick(ActiveCell, True)
End Sub
Tabelle1:
Code:
Public Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Call DatenEintragen(Target)
End Sub
Wichtig ist hier, den Standard "Private Sub" in "Public Sub" umzubenennen, sonst klappt der Aufruf aus einem allg. Modul nicht.
Gruß, Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
das Übergeben des KeyCodes funktioniert nur indirekt über das Simulieren einer Tastatureingabe per Sendkeys.
Code:
Private Sub CommandButton1_Click()
Application.SendKeys "a"
TextBox1.SetFocus
End Sub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Nonexperta
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Nonexperta,
Du hast sicher etwas bestimmtes damit im Sinn. Jedoch könnte man sicher dahingehend Überlegungen anstellen, ob es wirklich Sinnvoll sein kein.
Wenn ich das KeyDown Ereignis nutze, dann steht da gewöhnlich so etwas:
Code:
Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
wenn diese Taste oder jene Taste gedrückt wurde, dann mach dies oder das oder auch nicht
End Sub
Und wenn ich das aus einer anderen Prozedur zum laufen bringen möchte, was spricht dagegen, das dort direkt ablaufen zu lassen:
Code:
Sub Test()
mach dies oder das oder auch nicht
End Sub
Sonst könntest Du uns ein Beispiel nennen, oder den Zweck genauer erklären. Dann könnten vielleicht andere Ideen einfließen oder wir könnten durch Deine inspiriert werden.
Gruß Atilla
Registriert seit: 30.10.2014
Version(en): 2013
Hallo Atilla,
danke für deine Nachfrage. Nun zunächst einmal möchte ich einfach was lernen. Dann war ich gestern begeistert als ich den Beitrag von Kathrin Flint und dir
gelesen habe, wie man mit recht wenig Programmierung einen Doppelklick als Zusatzfunktion in eine Textbox einbauen. Mit dem Aufruf von KeyDown Prozedur
könnte ich mir z.B. eine Art Autopilot vorstellen. Mit den unterschiedlichen Keycodes werden dann unterschiedliche Ereignisse abgearbeitet. Natürlich kann
man so etwas auch wieder anders machen, aber worum es im allgemeinen geht ist doch die Erweiterung der Möglichkeiten bei der ganzen Sachen.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo zusammen,
ich würde mehrfach nötige Abläufe nicht mehrfach in verschiedenen Makros programmieren, sondern auslagern und von den Makros aus aufrufen.
Das Aufrufen eines abgeschlossenen Makros wie hier das Event-Makro birgt auch Risiken.
Eventuell musst Du im Event eine Fallunterscheidung hinterlegen, ob es wirklich vom Event kommt oder von einem anderen Makro aufgerufen wurde.
Wenn Du z.B. mal das Event erweiterst, passieren vielleicht Dinge, die Du mit dem "externen" Aufruf gar nicht wolltest. Eventuell können solche Notwendigkeiten aber auch dazu führen, dass es einfacher ist, die codes wieder einzulagern als das ausgelagerte Makro für alle Eventualitäten flexibel zu gestalten.
...
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)