per VBA bestimten TextBox "befüllen"

Moderator: ModerationP

per VBA bestimten TextBox "befüllen"

Beitragvon mikikado » 31. Okt 2020, 17:34

Hallo Forumler!

Ich habe ein UserForm in der per Button die "nächste" TextBox erstellt. Bezeichnung der TextBoxen wird hochgezählt:

Screenshot_2.jpg


Der Code hierzu:

Code: Alles auswählen
    Set txt = Me.Controls.Add("Forms.TextBox.1", BxTxt, True)
       
        With txt
            .Top = wTop
            .Left = wLefttxt + 78
            .SetFocus
        End With


Es gibt einen zweiten Button mit der ein Dialog geöffnet und eine Datei kann gesucht werden.

Das klappt auch per:

Code: Alles auswählen
Function Dialog_Bild() As String

With Dialogs(wdDialogInsertPicture)
    .Display
    Dialog_Bild = .Name
End With
End Function


Die TextBoxen "erstelle" ich ja per Button und vergebe einen bestimmten Namen:

Code: Alles auswählen
BxTxt = "txtBxFoto" & namz

variable namz wird "hochgezählt"
Wie erreiche nun, dass ich dieses eben erstellte TextBox ansprechen kann (Pfad der ausgesuchten Datei soll hier "gespeichert" werden)??

Irgendwie komme ich nicht weiter und habe im Netz nichts vergleichbares gefunden als Lösung. Vielleicht habe ich auch mit falschen Begriffen gesucht.

Wer kann mir helfen?

Für Ihre Bemühungen besten Dank im Voraus.

Hg
Michael
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
mikikado
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 245
Registriert: 05. Mär 2010, 11:27

Re: per VBA bestimten TextBox "befüllen"

Beitragvon knobbi38 » 31. Okt 2020, 20:33

Hallo Michael,

über die Controlsauflistung der Userform, z.B.
Code: Alles auswählen
Me.Controls("Textbox" & 1).Value = "Hallo"


Andere Variante:
Um von den Namen unabhängig zu sein, kannst du die beim Erstellen die zurückgegebene Objektreferenz
Code: Alles auswählen
Set txt = Me.Controls.Add("Forms.TextBox.1", BxTxt, True)

auch in eine Collection speichern und optional mit einem Key versehen.
Dann kannst du diese dann auch direkt über den Index oder den Key ansprechen.
Analog würde das auch mit einem einfachen Array gehen, worin die Objektreferenzen abgelegt werden.

Andere Frage:
Warum so umständlich? Für so etwas würde man normalerweise eine Listbox nehmen, anstatt neue Controls zu erzeugen. Das wäre mit deutlich weniger Aufwand verbunden.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2797
Registriert: 02. Jul 2015, 14:23

Re: per VBA bestimten TextBox "befüllen"

Beitragvon mikikado » 01. Nov 2020, 09:59

Hallo!

Ich habe es so gelöst:

Code: Alles auswählen
Private Sub cmdbtn2_Click()
Dim objtxt    As MSForms.Control

Const cstrCtlName As String = "txt"

For Each objtxt In UserForm1.Controls
 
  If objtxt.Name Like cstrCtlName & "*" Then
    MsgBox objtxt.Name
        If objtxt = "" Then
            objtxt = Dialog_Bild
        End If
       
  End If

Next
   

End Sub
Benutzeravatar
mikikado
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 245
Registriert: 05. Mär 2010, 11:27

Re: per VBA bestimten TextBox "befüllen"

Beitragvon knobbi38 » 01. Nov 2020, 12:44

Hallo Michael,

das ist jetzt keine so gute Lösung, weil "txt" der übliche Präfix für alle Textboxen ist und ein Vergleich mit Like und einem Platzhalter auch nicht optimal ist. So würde alle Textboxen angesprochen, wenn du dich an die gängigen Namenskonventionen hälst.

Deine ursprüngliche Fragestellung war, wie ganz gezielt einen Textbox angesprochen werden kann. Wie bereits gezeigt, geht das mit der Controls-Auflistung.
Wenn du eine bestimmte Gruppe von Textboxen mit fortlaufender Nummer ansprechen möchtest, geht das auch über die Controls-Auflistung, in dem du an Namen der Textbox die lfd. Nummer anhängst.
Möchtest du unabhängig von Namen der Textbox eine Schleife durchlaufen und eine Gruppe ansprechen, gibt es auch die Tag Eigenschaft, die dafür genutzt werden könnte:
Code: Alles auswählen
Dim ctl As Control
 
For Each ctl In Me.Controls
  If TypeName(ctl) = "TextBox" Then
    If ctl.Tag = "Grp_Bild" Then
      ' Todo
    End If
  End If
Next

Hier werden z.B. alle Textbox-Controls mit der Tag-Eigenschaft "Grp_Bild" angesprochen und ausgewertet.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2797
Registriert: 02. Jul 2015, 14:23


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast