Anzeige
Archiv - Navigation
1228to1232
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

mehrere Textboxen / Auswahlfelder - Code für alle

mehrere Textboxen / Auswahlfelder - Code für alle
Jonathan
Hey,
der Betreff ist evtl. etwas irreführend...
In einer UF habe ich zwanzig Reihen a 5 Textfelder und 3 Auswahlfelder. Diese sind im Stil
txt_betrag1, txt_kat1, ...
txt_betrag2, txt_kat2, ...
benannt.
Nun soll (hier erstmal nur für die Textfelder txt_betrag(Zahl 1-20)) beim Auswählen des Textfeldes ein bestimmter Code ausgeführt werden. Ob nun ausgewählt oder beim Druck auf die Enter-Taste ist mir erstmal egal (ich denke, dass kann individuell angepasst werden). Ich möchte nun nur nicht für jedes einzelne Feld (dies sind 20*8=160 Felder) das Ereignis separat abfangen. Gibt es eine Möglichkeit, dies zu vereinfachen?
Würde mich über Hilfe - wie immer - sehr freuen!
LG
Jonathan
AW: mehrere Textboxen / Auswahlfelder - Code für alle
06.09.2011 06:33:23
Hajo_Zi
Halllo Jonathan,
esx soll also nicht bei Eingabe (Klassenprogrammierung) erfolgen sondern vor Druck?
machen eine Schleife drüber mit
Controls("Txt_Betrag" &inI).....

AW: mehrere Textboxen / Auswahlfelder - Code für alle
06.09.2011 07:57:54
mischarichter
Hi Jonathan,
mit der Schleife hat Hajo recht. Dir muss aber klar sein, wann diese schleife gestartet wird:
beim Verlassen jedes einzelnen controls - dann klassenprogrammierung für alle betreffenden controls
beim verlassen der letzten textbox - dann dort ein ereignis programmieren, zB so.
dim txt as control
for each txt in me.controls
if left(txt.name,3) ="txt" then
...
endif
next txt
mischarichter
Anzeige
He, Mischa, dich gibt's noch?! ;-)) Gruß owT
07.09.2011 15:31:13
Luc:-?
:-?
AW: Code für alle Textboxen (Klasse)
06.09.2011 15:19:08
Jonathan
Hallo ,
danke für Eure Antworten! Ich glaube, meine Fragen sind damit schon geklärt; ich werde mal beide Variante (Schleife, Klassenmodul) testen!
Eine Frage habe ich noch (nicht direkt hierzu):
Mit drücken der Entertaste - sofern eine Textbox ausgewählt ist - soll sich eine InputBox öffnen. Dies klappt auch:

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call Betrag_eingeben
End Sub


Private Sub Betrag_eingeben()
Dim Betrag As String
Betrag = InputBox(prompt:="Bitte geben Sie den Zahlenwert der Buchung ein; bei bereits  _
vorhandenden Beträgen werden diese summiert.", Title:="Betrag eingeben")
If IsNumeric(Me.TextBox3.Value) Then
Me.TextBox3.Value = WorksheetFunction.sum(CDbl(Me.TextBox3.Value), CDbl(Betrag))
Else
Me.TextBox3.Value = Betrag
End If
Me.TextBox3.SetFocus
End Sub
Was aber nicht funktioniert: Me.TextBox3.SetFocus. Irgendwie wird der Foyus nicht auf die Textbox gesetzt, sondern es wird ganz normal die nächste Form ausgewählt (z.B. ein Button).
Wie kann ich den Focus richtig setzen?
Danke euch!!
Anzeige
AW: Code für alle Textboxen (Klasse)
06.09.2011 18:06:53
fcs
Hallo Jonathan,
die Enter-Taste löst normalerweise auch das das Exit-Ereignis der Textboxen aus.
Indem man den Wert für Cancel auf True setzt kann man verhindern, dass die Box verlassen wird.
Nachfolgende Anpassungen muss du machen, damit es funktioniert.
In wie weit du das dann ggf. in die Klassenmodule für die Textboxen einbauen kannst weiss ich nicht genau (ist bisher nicht so mein Gebiet). Bei der großen Anzahl macht das auf jeden fall Sinn.
Wahrscheinlich muss du die Variable
"bBoxVerlassen" As Boolean 'Merker für Verlassen der Textbox
Dann in einem allgemeinen Modul als Public deklarieren.
Gruß
Franz

'Variablendeklaration am Beginn des Userform-Code-Moduls
Private bBoxVerlassen As Boolean 'Merker für Verlassen der Textbox
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = bBoxVerlassen
bBoxVerlassen = False
End Sub
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then Call Betrag_eingeben '13 = Entertaste
End Sub
Private Sub Betrag_eingeben()
Dim Betrag As String
Eingabe:
Betrag = InputBox(prompt:="Bitte geben Sie den Zahlenwert der Buchung ein; " _
& "bei bereits  vorhandenden Beträgen werden diese summiert.", Title:="Betrag eingeben")
If IsNumeric(Betrag) Then
If IsNumeric(Me.TextBox3.Value) Then
Me.TextBox3.Value = WorksheetFunction.Sum(CDbl(Me.TextBox3.Value), CDbl(Betrag))
Else
Me.TextBox3.Value = Betrag
End If
Else
If Betrag  "" Then
MsgBox "Eingabe ist keine Zahl", vbInformation, "Betrag eingeben"
GoTo Eingabe
End If
End If
bBoxVerlassen = True
End Sub

Anzeige
AW: Code für alle Textboxen (Klasse)
06.09.2011 22:50:14
Jonathan
Super, vielen lieben Dank Euch allen!
Aber natürlich noch eine Rückfrage:
Ich konnte mit Hilfe der Beispieldatei eine entsprechende Klasse programmieren, allerdings regiert diese nur auf das Drücken der Enter-Taste; die anderen Ereignisse werden unberücksichtigt gelassen:
UserForm

Option Explicit
Public bBoxVerlassen As Boolean
Dim i As Integer
Dim TxTBoBetrag() As New Klasse1
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 0 To 19
ReDim Preserve TxTBoBetrag(i)
Set TxTBoBetrag(i).km_TxTBoBetrag = Me("txt_betrag" & i + 1)
Next i
End Sub
Private Sub UserForm_Terminate()
Erase TxTBoBetrag
End Sub
Klassenmodul

Option Explicit
Public WithEvents km_TxTBoBetrag As MSForms.TextBox
Public bBoxVerlassen As Boolean
Private Sub km_TxTBoBetrag_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = bBoxVerlassen
bBoxVerlassen = False
End Sub
Private Sub km_TxTBoBetrag_Enter()
Call Betrag_eingeben
End Sub
Private Sub km_TxTBoBetrag_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As  _
Integer)
If KeyCode = 13 Then Call Betrag_eingeben
End Sub
Private Sub Betrag_eingeben()
Dim Betrag As String
Eingabe:
Betrag = InputBox(prompt:="Bitte geben Sie den Zahlenwert der Buchung ein; bei bereits  _
vorhandenden Beträgen werden diese summiert.", Title:="Betrag eingeben")
If IsNumeric(Betrag) Then
If IsNumeric(km_TxTBoBetrag.Value) Then
km_TxTBoBetrag.Value = WorksheetFunction.sum(CDbl(km_TxTBoBetrag.Value), CDbl(Betrag))
Else
km_TxTBoBetrag.Value = Betrag
End If
Else
If Betrag  "" Then
MsgBox "Ihre Eingabe ist kein nummerischer Wert.", vbCritical, "Betrag eingeben"
GoTo Eingabe
End If
End If
bBoxVerlassen = True
End Sub
Ich würde mich sehr freuen, wenn Ihr mir noch helfen könntet! ;-)
VG
Anzeige
AW: Code für alle Textboxen (Klasse)
07.09.2011 01:42:12
fcs
Hallo Jonathan,
im Klassenmodul der MsForms-Textbox werden die Ereignisse Enter und Exit nicht unterstützt.
Das müsste man direkt im Userform realisieren.
Auf jeden Fall muss die Deklaration der Variablen "bBoxVerlassen" aus dem KlassenCode und aus dem Useform-Code verschwinden.
Die Deklaration
Public bBoxVerlassen as Boolean
muss in einem allgemeinen Modul erfolgen.
Ich schau am Morgen nochmal ob man das irgendwie noch in der Klasse umsetzen kann, aber ich denke es geht nicht. Erste Versuch mit MouseUp und MouseDown waren nicht zufriedenstellend.
Gruß
Franz
Anzeige
Userform - Code für alle Textboxen (Klasse)
07.09.2011 13:39:06
fcs
Hallo Jonathan,
1. Tastenkombination, um den Fokus auf ein bestimmtes Steuerelement im Userform zu setzen.
Mit beispielhaft
Application.OnKey "^f", "SetFokusAufUF_Textbox"
Das OnKey-Ereignis gilt für das Excel-Anwendungsfenster, funktioniert aber nicht wenn eines der Elemente im Userform den Fokus hat.
Man muss dann für alle Steuerelemente, die den Fokus bekommen können eine KeyDown-Ereignisprozedur anlegen bzw. im zugehörigen Klassenmodul. Mit Klassen geht das noch verhältnismäßig einfach, ist aber doch recht mühselig.
2. Exit-Ereignis für Betrags-Textboxen
Wie schon geschrieben, gibt es für Textboxen im Klassenmodul keine Exit-Ereignis-Prozedur. Ich hab auch keinen zufriedenstellenden Workaround gefunden.
Es bleibt also nichts anderes übrig, als die Exit-Ereignisprozeduren direkt im Userform-Code anzulegen.
In der hochgeladenen Beispieldatei hab ich mal alles umgesetzt
.https://www.herber.de/bbs/user/76507.xls
Gruß Franz
Anzeige
AW: Userform - Code für alle Textboxen (Klasse)
07.09.2011 18:14:56
Jonathan
Vielen vielen Dank für deine Hilfe und Mühe, Franz!
AW: Userform - Code für alle Textboxen (Klasse)
07.09.2011 18:48:14
Jonathan
Hallo Franz,
ich möchte mich noch einmal kurz rückmelden; ich habe deine Beispieldatei nun durchgearbeitet! Das ist echt Wahnsinn, vielen lieben Dank für die super Hilfe!!! Alle meine Fragen wurden von dir beantwortet!
Nochmals danke!!

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige