Clever-Excel-Forum

Normale Version: Textboxen mit Auswahl einer Combobox nacheinander füllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Fussballdeutschland :18: :15: :05: :21:

Wie kann ich 10 Textboxen mit nur einem Comboboxfeld nacheinander füllen.
Habe dazu diesen Thread gefunden

Mein Vorhaben
- linke Seite 10 Textboxen untereinander txt_pl_01 bis txt_pl_10
- rechte Seite 1 x Combobox cbo_pl_fuellen Bezug ist die Spalte AH
----------------
Tabelle1 befüllung, alle Formeln beginnen in der Zeile 2
Code:
AD1 = ID   =WENN(AK2<>"";AB2;"")
AE1 = Vorgabe
AF1 = Position   =WENN(AK2<>"";AB2;"")
AG1 = Hilfsspalte1   =WENN(ODER(ZÄHLENWENN(AK:AK;AE2);AE2="");"";AE2)
AH1 = Hilfsspalte2   =WENN(ZEILE(AE1)>SUMME(N(AG$2:AG$100<>""));"";INDIREKT("AE"&KKLEINSTE(WENN(AG$2:AG$100<>"";ZEILE($AE$2:$BA$100));ZEILE(AE1))))
AK1 = Vorgabe_wählen   "Namensmanager" BEREICH.VERSCHIEBEN(Tabelle1!$AH$2;;;SUMME(N(Tabelle1!$AH$2:$AH$100<>"")))
AL1 = ID   =WENNFEHLER(SVERWEIS(AK2;$AE$2:$AF$14;2;0);"")
AM1 = Platz-ID oder vorhanden   =WENN(AK2<>"";AB2;"")

Frage nun, wie kann ich mit dem Inhalt cbo_pl_fuellen nach befüllen der txt_pl_01 als nächstes auf die Textbox txt_pl_02 dann txt_pl_03 ohne die schon stehenden Auswahlen zu berücksichtigen, weiter ansteuern.
Apropos, vergaß zu erwähnen, die schon gefüllten Textboxen sollen in die Spalte Ak ab Zeile 2 nach unten die Zellen füllen. Userform noch nicht erstellt, es gibt nur die Tabelle1.
Bitte um Hilfe durch euch.
mögen die besseren gewinnen :19: :18:
mfg
Hallöchen,

die Textboxen kannst Du per VBA in einem Makro z.B. so ansprechen:

Code:
Sub test()
For iCnt = 1 To 2
MsgBox ActiveSheet.Shapes("Textfeld " & iCnt).DrawingObject.Caption
Next
End Sub

Wenn Deine Textboxen mal nicht einfach mit einer Indexnummer programmierbar sind, dann kannst Du auch ein Array bilden mit den Namen der Textboxen.

Code:
Sub test()
Dim arrBoxen, iCnt%
arrBoxen = Array("Textbox 1", "Textbox 2")
For iCnt = 0 To 1
MsgBox ActiveSheet.Shapes(arrBoxen(iCnt)).DrawingObject.Caption
Next
End Sub


Den Rest schaffst Du?
Hallo André
vorab danke
(26.06.2014, 17:42)schauan schrieb: [ -> ]...in einem Makro z.B. so ansprechen:

Code:
Sub test()
For iCnt = 1 To 2
MsgBox ActiveSheet.Shapes("Textfeld " & iCnt).DrawingObject.Caption
Next
End Sub
Wie anwenden, das sind noch grössere Teile für mich
(26.06.2014, 17:42)schauan schrieb: [ -> ]...dann kannst Du auch ein Array bilden mit den Namen der Textboxen.

Code:
Sub test()
Dim arrBoxen, iCnt%
arrBoxen = Array("Textbox 1", "Textbox 2")
For iCnt = 0 To 1
MsgBox ActiveSheet.Shapes(arrBoxen(iCnt)).DrawingObject.Caption
Next
End Sub


Den Rest schaffst Du?
Ich mag gerne eine Textbox nach der anderen füllen, da deren Inhalt dann an die Spalte nacheinander eingefügt wird. Am besten schnell eine Ausagekräftige Datei mit UF stricken.
mfg
Hallo Frank,

na, dann werde ich mir Deine Datei mit dem Userform mal anschauen.

Da es in Deiner Frage zuerst um einige Seiten, Zellen, Spalten und Formeln ging, und später noch ein Userform erwähnt wurde, hatte ich angenommen, dass Deine Textboxen auf einem Blatt sind.

Textboxen im Userform sprichst Du im Prinzip so an:

Code:
Private Sub UserForm_Click()
Dim iCnt%
For iCnt = 1 To 2
MsgBox Me.Controls("TextBox" & iCnt).Text
Next
End Sub

Erstelle dazu ein Userform mit 2 Textboxen und füge den code dort ein. Wenn Du das userform ausführst und darauf klickst, werden Dir die Inhalte der beiden Textboxen in MsgBoxen ausgegeben. Die dürften jedoch anfangs leer sein Wink
(26.06.2014, 19:17)schauan schrieb: [ -> ]...dann werde ich mir Deine Datei mit dem Userform mal anschauen...
Hallo Andre,
hier die besagte Datei im Anhang - ist so in etwa wie ich mir das denke.
[attachment=327]
Was hier und da nicht stimmt, ist ein wenig kommentiert in der Userform bzw. auf dem Tabellenblatt
mfg
Edit:
Spalte AI von Zeile 2 - 13 muss eine Sverweisformel hinein, sorry. Hier für AI2 und dann runterkopieren
Code:
=WENNFEHLER(SVERWEIS(AH2;$AE$2:$AF$13;2;0);"")
Hallo Frank,

ich schaue heute Nachmittag drüber. Muss jetzt erst mal noch einiges erledigen.
Hallo Frank,

zum Verständnis - Wenn Du in Deinem Userform etwas auswählst und alle Textboxen sind leer, dann hast Du anschließend in allen 10 Textboxen das Gleiche stehen?

Warum übernimmst Du den gewählten Eintrag in den Quellbereich der Combobox? Dadurch kann es doch passieren, dass irgendwann alle Einträge gleich sind? Außerdem wird das Change-Ereignis dadurch nochmal durchlaufen und in der Textbox steht anschließend etwas anderes. Ist das wirklich so gewollt?
(27.06.2014, 20:19)schauan schrieb: [ -> ]...Wenn Du in Deinem Userform etwas auswählst und alle Textboxen sind leer, dann hast Du anschließend in allen 10 Textboxen das Gleiche stehen...

Hallo André & @all others

wenn du im Tabellenblatt von AK2 bis AK13 händisch die Artikel auswählst, siehst du wie ich es mit derCombobox im UF meine. Die Spalteneinträge werden nach Auswahl neu gegliedert, soll heißen, wieder in Reihe gestellt. Mit der neuen Konstellation sollte nun die Combobox wieder befüllt sein. Immer um einen weniger.

(27.06.2014, 20:19)schauan schrieb: [ -> ]Warum übernimmst Du den gewählten Eintrag in den Quellbereich der Combobox? Dadurch kann es doch passieren, dass irgendwann alle Einträge gleich sind? Außerdem wird das Change-Ereignis dadurch nochmal durchlaufen und in der Textbox steht anschließend etwas anderes. Ist das wirklich so gewollt?
Gleich, wohl kaum. Quellbereich ist die Spalte AH, Zielbereich jedoch die Spalte AK. Deswegen war der Gedanke in irgendeiner Form die Anweisung zu geben: Wenn Textbox1 befüllt, befülle miit der erneuten Auswahl der Combobox die nächstleere gegebene Textbox. Von meiner Seite aus, sehe ich da dann keine doppelt bzw. mehrfachen gleichen Einträge.

Das nächste Problem - Warum ist die aktuelle Auswahl per UF-Combobox immer um eine Zeilenhöhe verschoben. Hingegen bei händischer Auswahl im Tabellenblatt nicht ?

Nächste Kleinigkeit die Spalte AL wird als Artikel-ID geführt, ist die Auswahl erfolgt, sollte diese neben dem Eintrag der Textbox in dem Label zu sehen sein. Combobox auf ColumnCount 2 gesetzt und den Eintrag für den Label5 gesetzt
Code:
.Label5.Caption = Worksheets(1).Cells(ComboBox1.ListIndex + 1)
ICh weiß allerdings nicht ob das so richtig geschrieben oder positioniert ist.

Ich bitte euch um Aufklärung / Verbesserungsvorschläge
versuche mich im Verstehen und erarbeiten des Codes
Ich hoffe es bestens erklärt zu haben

mfg & schönes Wochenende
Hallo Frank,

(28.06.2014, 10:38)WergibtmirRat schrieb: [ -> ]Nächste Kleinigkeit die Spalte AL wird als Artikel-ID geführt, ist die Auswahl erfolgt, sollte diese neben dem Eintrag der Textbox in dem Label zu sehen sein. Combobox auf ColumnCount 2 gesetzt und den Eintrag für den Label5 gesetzt
Code:
.Label5.Caption = Worksheets(1).Cells(ComboBox1.ListIndex + 1)
ICh weiß allerdings nicht ob das so richtig geschrieben oder positioniert ist.

hier fehlt noch die Spaltenangaben bei Cells

Code:
.Label5.Caption = Worksheets(1).Cells(ComboBox1.ListIndex + 1, 1)

wenn der Wert aus der Spalte A genommen werden soll.

Nachtrag:

Zitat:Hallo André & @all others

wenn du im Tabellenblatt von AK2 bis AK13 händisch die Artikel auswählst, siehst du wie ich es mit derCombobox im UF meine. Die Spalteneinträge werden nach Auswahl neu gegliedert, soll heißen, wieder in Reihe gestellt. Mit der neuen Konstellation sollte nun die Combobox wieder befüllt sein. Immer um einen weniger.

(Gestern 21:19)schauan schrieb: Warum übernimmst Du den gewählten Eintrag in den Quellbereich der Combobox? Dadurch kann es doch passieren, dass irgendwann alle Einträge gleich sind? Außerdem wird das Change-Ereignis dadurch nochmal durchlaufen und in der Textbox steht anschließend etwas anderes. Ist das wirklich so gewollt?

Gleich, wohl kaum. Quellbereich ist die Spalte AH, Zielbereich jedoch die Spalte AK. Deswegen war der Gedanke in irgendeiner Form die Anweisung zu geben: Wenn Textbox1 befüllt, befülle miit der erneuten Auswahl der Combobox die nächstleere gegebene Textbox. Von meiner Seite aus, sehe ich da dann keine doppelt bzw. mehrfachen gleichen Einträge.

Das geht so
Code:
Private bolAufruf As Boolean



Private Sub ComboBox1_Change()
    Dim lngCounter As Long
        
    If bolAufruf Then Exit Sub
    For lngCounter = 1 To 10
        If Me.Controls("TextBox" & lngCounter) = "" Then Exit For
    Next lngCounter
    With Me
    .Controls("TextBox" & lngCounter) = Me.ComboBox1
'    TextBox1.Value = Me.ComboBox1
    .Label5.Caption = Worksheets(1).Cells(ComboBox1.ListIndex + 2, 1)
    End With
    bolAufruf = True
    ThisWorkbook.Worksheets("Tabelle1").Range("AK2").Value = TextBox1.Value
    bolAufruf = False
End Sub
Hallo,

hier ist der vba-code von Stefan noch etwas angepasst.
ich habe unten noch eine Schleife eingefügt, damit die Spalte AK auf dem Excel-Blatt auch je nach Auswahl der entsprechenden Combobox des Userforms kontinuierlich gefüllt wird. Ich habe den Inhalt der entspechenden Textbox dazugetan, damit die verschiedenen Einträge eingefügt werden.

In der Combobox wird durch die Änderung des Listenbereiches jedoch immer der nächste Eintrag angezeigt. Nachteil dabei ist, dass der nicht ausgewählt werden kann. Man muss erst einen anderen Eintrag in der Combobox wählen - was zur Folge hat, dass dann der andere auf dem Tabellenblatt eingetragen wird.
Besser wäre, die Combobox zurückzusetzen. --> im code die Zeile mit ... Listindex = -1
Tue diese Zeile mal auskommentieren und dann den code testen, dann siehst Du, was ich meine.

Code:
Private bolAufruf As Boolean

Private Sub ComboBox1_Change()
    Dim lngCounter As Long, iCNt1 As Integer
        
    If bolAufruf Then Exit Sub
    For lngCounter = 1 To 10
        If Me.Controls("TextBox" & lngCounter) = "" Then Exit For
    Next lngCounter
    With Me
    .Controls("TextBox" & lngCounter) = .ComboBox1
'    TextBox1.Value = Me.ComboBox1
    .Label5.Caption = Worksheets(1).Cells(ComboBox1.ListIndex + 2, 1)
    .ComboBox1.ListIndex = -1
    End With
    bolAufruf = True
    With ThisWorkbook.Worksheets("Tabelle1").Range("AK2:AK13")
      Do While .Cells(icnt + 1, 1).Value <> ""
        icnt = icnt + 1
      Loop
      .Cells(icnt + 1, 1).Value = Me.Controls("TextBox" & lngCounter).Value
    End With
    bolAufruf = False
End Sub
Seiten: 1 2