Aufrufen TextBox1_KeyDown Prozedur aus einer anderen Prozedur heraus
#1
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?
Top
#2
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)
Top
#3
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)
Top
#4
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:
  • Nonexperta
Top
#5
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
Top
#6
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.
Top
#7
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)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste