Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
500to504
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
500to504
500to504
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Textbox & Variable

Textbox & Variable
20.10.2004 14:45:22
Franz
Hallo Fachleute,
ich habe mehrere Textboxen in einer UF zu bearbeiten:
TextBox1 = ...
TextBox2 = ...
TextBox3 =
TextBox4 =
TextBox5 =
TextBox6 =
...
...
...
...
Lässt sich das auch irgendwie mit einer Schleife variabel schreiben, so ähnlich wie:

Sub test
For i = 1 to 17
TextBox & i = ...
next
End Sub

So wie's ich geschrieben habe, geht's leider nicht, das gibt 'nen Syntaxfehler. Könnt ihr mir da bitte helfen?
Vielen Dank und Grüße
Franz

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox & Variable
Ramses
Hallo Franz
schon knapp dran:
For i = 1 to 17
Me.Controls("TextBox" & i) = "Eintrag"
next i
Gruss Rainer
Danke!! ... und noch ne Zusatzfrage
20.10.2004 15:14:47
Franz
Hallo Rainer,
besten Dank, klappt natürlich :-)) !! Und während des Probierens ist mir noch was eingefallen: Die Anzahl der Textboxen wird sich noch ändern, sie werden jedoch immer in diese Schleife reinpassen. Gibt es die Möglichkeit, die Zahl der Textboxen in einer UF zu zählen, à la:
For i = 1 to Me.Controls(TextBox...).Count
Danke schon mal und Grüße
Franz
P.S.: werd grad weggerufen, kann erst später wieder antworten..... :-((
AW: Danke!! ... und noch ne Zusatzfrage
Ramses
Hallo Franz
da musst du einen internen Zähler aktivieren
Dim n as Integer
n=0
For n = 1 to Me.Controls.Count
If Left(Me.Controls(n).Name,7) = "Textbox" Then
n = n + 1
End If
next
For i = 1 to n
Me.Controls("TextBox" & i) = "Eintrag"
next i
Ungetestet,... sollte aber tun ;-)
Gruss Rainer
Anzeige
Leider noch nicht...
20.10.2004 17:02:59
Franz
Hallo Rainer,
hab den Code geringfügig geändert, um ihn besser zu kapieren:
Dim n As Integer, m As Integer
m = 0
For n = 1 To Me.Controls.Count
MsgBox Me.Controls(n).Name, , "Name-Control"
If Left(Me.Controls(n).Name, 7) = "Textbox" Then
m = m + 1
MsgBox m, , "Zähler"
End If
Next
- m wird nicht hochgezählt; hab festgestellt, dass er penibel ist mit der Rechtschreibung. Habe "Textbox" geändert in "TextBox", jetzt nimmt er es
- habe mit der ersten MsgBox festgestellt, dass er die Controls nicht in der Reihenfolge nimmt, in der sie in "Ansicht - Aktivierreihenfolge" angeordnet sind. Und das auch nicht bei den TExtboxen, obwohl die sauber von 1 - 7 sortiert sind.
- und nun der Fehler: momentan sind 18 Controls (insgesamt) in der UF, wobei eines davon ein doppeltes ist: eine Combobox in einem Frame. Das wird als 1 angezeigt. Gezählt werden aber beide Teile extra. Also kommt er bei "Me.Controls.Count" auf "19". Aber bei "n = 19" kommt bei der Zeile
" If Left(Me.Controls(n).Name, 7) = "Textbox" Then " die Fehlermeldung "Ungültiges Argument" (bzw schon eine Zeile vorher bei der Msgbox). Irgendwo besteht da Uneinigkeit: sind es nun 18 oder 19 ?!?
Falls du es dir mal anschauen willst, hier mal die Datei (baut auf einem Beispiel von P@ulchen auf:
https://www.herber.de/bbs/user/12377.xls
Grüße
Franz
Anzeige
AW: Leider noch nicht...
Ramses
Hallo Franz
Das mit der Gross- Kleinschreibung ist richtig,... habe ich vergessen :-)
Die Zählung "Controls.Count" hat nichts mit der Aktivierreihenfolge oder mit der Nummerierung zu tun, sondern EXCEL zählt intern die Controls in der Reihenfolge durch, wie sie in die UF eingefügt worden sind.
Kein Workaround dafür.
Das mit dem Frame ist tatsächlich so. Das Frame wird als eigener Container behandelt und die Objecte im Container musst du extra zählen.
Z.B.
For n = 1 To Me.Controls.Count
If InStr(1, Me.Controls(n).Name, "Frame") &gt 0 Then
For j = 1 To Me.Controls(n).Controls.Count
If Left(Me.Controls(n).Name, 7) = "TextBox" Then
m = m + 1
End If
Next j
End If
If Left(Me.Controls(n).Name, 7) = "TextBox" Then
m = m + 1
End If
Next n
Trotzdem musst du sicherstellen, dass die Textboxen dann von entsprechend der Anzahl benannt sind, TextBox1 TextBox2 usw.
Gruss Rainer

Anzeige
Sorry, noch nicht
20.10.2004 21:23:44
Franz
Hallo Rainer,
leider noch dasselbe: n geht bis 19, und dann kommt wieder die Fehlermeldung. Hoffe ich hab nix Wichtiges unterschlagen bei der Problembeschreibung. Hab sicherheitshalber noch mal die Datei angehängt:
https://www.herber.de/bbs/user/12419.xls
Grüße und danke für dein Bemühen!
Franz
Doch, doch...
Ramses
Hallo Franz
Hau Ruck und nicht schön
On Error Resume Next
vor die n-Schleife setzen.
Die Textboxen sprichst du dann ja sowieso mit "m" an ;-)
Alternativ kannst du auch in der j-Schleife für jedes gefundene Control von n 1 subtrahieren :-)
Aber das ist mühsam.
Gruss Rainer
Anzeige
Hmm...
20.10.2004 21:56:18
Franz
Hallo Rainer,
damit hab ich auch schon rumprobiert, komm aber auf nix Gscheites. Falls ich's richtig gesetzt habe, wie du es meinst, ergibt es trotz 7 TextBoxes m = 9 ?!?!?

Sub test
Dim n As Integer, j As Integer, m As Integer
m = 0
On Error Resume Next
For n = 1 To Me.Controls.Count
'MsgBox Me.Controls(n).Name
If InStr(1, Me.Controls(n).Name, "Frame") > 0 Then
For j = 1 To Me.Controls(n).Controls.Count
If Left(Me.Controls(n).Name, 7) = "TextBox" Then
m = m + 1
End If
Next j
End If
If Left(Me.Controls(n).Name, 7) = "TextBox" Then
m = m + 1
End If
Next n
On Error GoTo 0
MsgBox m
End Sub

Grüße
Franz
Anzeige
AW: Hmm...
ypsilon
hi Franz,
meinst du so ?
bestimmt auch nicht besonders hübsch aber funktioniert ;-)
Dim m As Integer, x As Integer, y As Integer
x = Me.Controls.Count
Do While y If InStr(1, Me.Controls(y).Name, "Frame") > 0 Then
x = x - 1
End If
If Left(Me.Controls(y).Name, 7) = "TextBox" Then
m = m + 1
End If
y = y + 1
Loop
MsgBox m, , "Zähler"
cu Micha
AW: Hmm...
20.10.2004 22:52:14
Franz
Hi Micha,
"bestimmt auch nicht besonders hübsch" : bin ja glücklicherweise gar nicht so recht in der Lage, das zu beurteilen :-)). Aber funktionieren tut's, bin begeistert, besten Dank!! (wenngleich mich schon interessiert hätte, warum das von Rainer nicht ganz tut. Vielleicht lern ich's ja mal...)
Danke und Grüße
Franz
P.S.: war diesen Sommer doch nicth in Berlin, schon gemerkt, oder ;-)))
Anzeige
AW: Hmm...
yps
...das rückwärtslaufen war dir bestimmt zu anstrengend ;-)
aber münchen zum oktoberfest soll ja auch ganz hübsch anstrengend sein *immernochkopfschmerzenhab*
cu Micha
AW: Hmm...
20.10.2004 23:02:32
Franz
jaja, da muss man schon frühzeitig mit dem Üben anfangen... *g*
Franz
Etwas eleganter... :-)
Ramses
Hallo Franz

Private Sub CommandButton1_Click()
Dim m As Integer
Dim ctrChk As Control
m = 0
On Error Resume Next
For Each ctrChk In Me.Controls
If Left(ctrChk.Name, 7) = "TextBox" Then
m = m + 1
End If
Next
On Error GoTo 0
MsgBox m
End Sub

Gruss Rainer
Ja! Genau!
20.10.2004 23:20:24
Franz
Hallo Rainer,
das tut perfekt! Vielen Dank! Und wenn du dazu eleganter sagst, dann muss ich wohl das von deinem Mitstreiter (sorry Micha!) wieder ausradieren :-)).
Und falls du noch ganz klein bisschen Lust haben solltest, kannst du dir das bitte anschauen, da geht es um dieselbe Datei. Hab ich heute mal reingestellt, aber noch keine Antwort bekommen:
https://www.herber.de/forum/index.htm?https://www.herber.de/forum/messages/503404.html
Eilt aber nicht, muss auch nicht mehr heute sein!!
Für Obiges auf jeden Fall vielen Dank und Grüße
Franz
Anzeige
So war es nicht gemeint ... :-) Lösung
Ramses
Hallo Franz
Damit wollte ich die Leistung von Micha nicht herabsetzen !!!
Ich habe mit meiner Lösung einfach ein bischen weniger IF-Abfragen :-)
Zu deiner anderen Frage:;
Wenn du den letzten Eintrag anklickst !!! funktioniert es.
Wenn du den Namen eingibst, dann nicht, weil der Listindex nicht initialisiert wird.
Frag mich aber nicht warum :-)
Lösen kannst du das, indem du noch einen leeren Datensatz anhängst
aRow = [A65536].End(xlUp).Row + 1 'Noch einen leeren Datensatz hinzufügen !!!
"+1" ist das Geheimnis.
Excel kann wohl die Index-Zuordnung machen, wenn noch ein zusätzlicher Datensatz vorhanden ist, der nicht dem eingegeben entspricht.
Gruss Rainer
Anzeige
Von mir auch nicht!!
20.10.2004 23:53:07
Franz
Hallo Rainer (und Micha),
war von mir auch nicht so gemeint, akzeptiere Michas Lösung genau so - und das weiß er auch....
Werde deinen letzten Tipp mit dem leeren Datensatz einsetzen, fällt ja keinem (User) auf *hihi*.
Vielen Dank dir auf jeden Fall, zumal du heute eigentlich wohl gar nicht hier/im Forum warst, für deine Hilfe und Grüße
Franz
AW: noch eleganter ...*grins*
yps
hi ihr beide,
was haltet ihr denn davon ?
Dim ctrcheck As MSForms.Control
Dim m As Integer
For Each ctrcheck In Me.Controls
If TypeOf ctrcheck Is MSForms.TextBox Then m = m + 1
Next
MsgBox m
cu Micha
Anzeige
Ihr übertrefft Euch!!
21.10.2004 08:54:03
Franz
Guten Morgen Micha,
wohl an der Ehre gepackt, wa?!? Find deine Lösung aber sehr gut, weil sie nicht nach dem Namen geht, sondern nach der Art des Controls. Und jetzt hab ich die Auswahl. Im vorliegenden Fall werde ich wohl Rainers Lösung einsetzen, weil ich mittlerweile dabei bin die eine oder andere TextBox durch eine ComboBox (z.B. Anrede) zu ersetzen. Wenn ich dieser dann den Namen "TextBox357" gebe, kann ich sie ansonsten unverändert in der Schleife mit drin lassen. Von deiner letzten Idee würde sie aber nicht mehr angesprochen.
Ich staune auf jeden Fall, was euch so alles immer wieder einfällt, und lese sowas mit sehr aufmerksamen Augen!!
Danke und Grüße
Franz
P.S.: hab grade ganz neu eine Frage eingestellt zu derselben Datei, falls du mal Lust hättest, dir das anzuschauen, vielleicht hast du da ja eine Idee dazu... Danke schon mal
Chapeau :-) Gut gemacht. o.T.
Ramses
...

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige