Anzeige
Archiv - Navigation
1900to1904
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

controls("Textbox" & irow)

controls("Textbox" & irow)
27.09.2022 16:52:47
MMRH
Hallo Allerseits,
ich bin gestern hier auf die im Betreff genannte Zeile gestoßen, die mir sicherlich einige Tage Zeit gespart hat. Dafür schon mal danke.
Dadurch kann ich innerhalb einer Schleife zu diversen Textboxen Vorgaben einfügen. Z.B. controls("Textbox" & irow).controltiptext = Cells(irow+1,3).value
Jetzt stellt sich mir die Frage, ob das mit einem Textbox Exit Ereignis verbunden werden kann.
Kann ich also aus
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
so etwas wie
Private Sub controls("Textbox" & irow)_Exit(ByVal Cancel As MSForms.ReturnBoolean)
machen um bei mehreren Textboxen beim Verlassen dieser Bedingungen zu prüfen?
Offensichtlich geht mein Vorschlag oben nicht, da er direkt rot gekennzeichnet wird.
Mein Ziel ist z.B. in einer Spalte 5 den string JJJJ zu hinterlassen. Jedes mal wenn dieser auftaucht, soll geprüft werden, ob die Textbox dieser Vorgabe gerecht wird:
in Pseudocode:
if cells(irow,5).value = "JJJJ" and not len(controls("Textbox" & irow).value) = 4 or not isnumeric(controls("Textbox" & irow).value) then
msgbox("Bitte Format...")
setfocus....
end if
Das soll aber beim Verlassen aller Textboxen geprüft werden....
Für Ideen/Lösungen bin ich dankbar.
Grüße

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: controls("Textbox" & irow)
27.09.2022 17:20:57
Zwenn
Hallo MMRH,
wenn ich es richtig verstanden habe, mochtest Du mit einem Event mehrere Controls bedienen. Das geht nicht mit den "mitgebrachten" Events der Controls, weil da immer ein Event zu genau einem Control gehört. Es geht meines Wissens nach nur über ein selbst programmiertes Event. Dazu benötigst Du Klassenrogrammierung, Ich kenne das nur im Zusammenhang mit dynamisch erstellten Controls, an die dann jeweils eine Instanz der Event-Klasse angetackert wird.
Schau Dir dazu mal dieses Beispiel für Buttons an. Welche Controls verwendet werden ist egal, solange sie ein gültiges Event zugewiesen bekommen.
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1888338#1888377
Ich habe das noch nie für manuell platzierte Controls verwendet. Sollte jemand einen besseren Weg kennen oder wissen, dass sich dieses Konzept mit denen gar nicht (so einfach) verwenden lässt, einfach direkt intervenieren.
Viele Grüße,
Zwenn
Anzeige
AW: controls("Textbox" & irow)
27.09.2022 18:05:49
Daniel
Hi
ein Eventmakro, das für mehrere Textboxen gilt so dass man das nicht für alle programmieren muss, kann man schon erstellen, das nennt sich "Klassenprogrammierung" (unter diesem Stichwort findest du sicherlich auch einiges)
für deinen Fall könntest du aber auch folgenden Workaround verwenden (falls du das mit der Klassenporgrammierung so wie ich nicht verstehst, oder falls das Exit-Event von dieser ausgenommen ist).
1. Verknüpfe jede Textbox, für die das gilt mit einer Ausgabezelle in einem eigenen Tabellenblatt (Tabellenblattname + Zelladresse in die Eigenschaft ControlSource eintragen in der Form: 'Tabelle1'!A1.) Wähle dabei eine Zelle in der Zeile, die der Textboxnummer entspricht
2. Erstelle dann für dieses Tabellenblatt das Change-Event. Sobald du eine Eingabe in eine Textbox, die mit einer Zelle verknüpft ist, abgeschlossen hast, wird der Textboxwert in die Zelle geschrieben und das Change-Event ausgelöst.
führe dann den Code im Change-Event aus. Wenn du die Zeile entsprechend der Textboxnummer gewählt hast, kannst du dann die Textbox über
Userform1.Controls("Textbox" & Target.Row) referenzieren.
Da der Code jetzt nicht mehr im Userformmodul steht, muss man den Userformnamen voranstellen.
wie gesagt, der professionelle Weg ist Klassenprogrammierung, das hier ist der kreative Workaround, falls das mit der Klassenprogrammierung aus irgendeinem Grund nicht klappt.
Falls die Textboxen schon in Editor erstzellt wurden und nicht erst zur Laufzeit generiert werden, kannst du die Arbeit auch so reduzieren:
schreibe den benötigten Code in ein normales Makro im Modul der userform und übergib die Textbox als Variable:

Sub Machwas(tbx as control)
dim irow as long
irow = val(mid(tbx.name, len("Textbox") + 1)
if cells(irow,5).value = "JJJJ" and not len(tbx.value) = 4 or not isnumeric(tbx).value) then
End sub
dann musst du zwar immer noch für jede Textbox das Exit-Event schreiben, aber dort steht dann nur noch als einzige Programmzeile:

Call Machwas(Textbox1)
Gruß Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige