Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Text Box füllen

Text Box füllen
02.04.2013 14:23:38
Climbi

Hallo,
ich möchte eine Textbox füllen, die ich in einer Userform mehrzeilig angelegt habe.
Das Füllen einer Zeile geht problemlos.
Wenn ich jedoch mehrere Zeilen füllen will wird immer nur die letzte Zuweisung angezeigt.
Vielen Danki im Voraus für Eure Hilfe
Gruß Climbi
So geht es nicht:
Private Sub UserForm_Initialize()
Me.TextBox1 = "Test_1"
Me.TextBox1 = "Test_2"
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text Box füllen
02.04.2013 14:28:04
Rudi
Hallo,
Private Sub UserForm_Initialize()
With TextBox1
.MultiLine = True
.Text = "Test_1"
.Text = .Text & vbCr & "Test_2"
End With
End Sub

Gruß
Rudi

AW: Text Box füllen
02.04.2013 15:27:33
Climbi
Hallo Rudi,
ja so geht es. Super.
Jetzt habe ich aber noch eine Frage.
Kann ich die Textbox auch in einer Schleife füllen?
In der Praxis will ich die Textbox nämlich mit den Zelleninhalten
einer Spalte füllen. (bis zur ersten leeren Zelle)
Vielen Dank für Deine Hilfe
Gruß Climbi

Anzeige
AW: Text Box füllen
02.04.2013 15:36:31
Klaus
Hi Climbi,
Private Sub UserForm_Initialize()
dim r as range
dim lrow as long
lrow = sheets("Tabelle1").cells(sheets("Tabelle1").rows.count,1).end(xlup).row
With TextBox1
.MultiLine = True
for each r in range("A1:A"&lrow)
.text = .text & r.value & vbCr
next r
End With
End Sub
Ich bin von Tabelle1 und Spalte A ausgegangen.
Grüße,
Klaus M.vdT.

Anzeige
AW: Text Box füllen
02.04.2013 15:36:34
Rudi
Hallo,
eine Schleife ist unnötig.
Private Sub UserForm_Initialize()
Dim rng
Set rng = Range(Sheets(1).Range("A2"), Sheets(1).Range("A2").End(xlDown))
With TextBox1
.MultiLine = True
.Text = Join(WorksheetFunction.Transpose(rng), vbCr)
End With
End Sub

Gruß
Rudi

Anzeige
was macht Transpose?
03.04.2013 10:49:15
Klaus
Hallo Rudi,
ich hab deinen Code jetzt in ein paar Varianten getestet.
.Text = Join(WorksheetFunction.Transpose(rng), vbCr)
funktioniert,
.Text = Join(WorksheetFunction.Transpose(Range("A2:A5")), vbCr)
funktioniert natürlich ebenfalls,
.Text = Join(WorksheetFunction.Transpose(Range("C5:F5")), vbCr)
macht einen "invalid call" (C5:F5 sind natürlich gefüllt!)
.Text = Join(Range("A2:A5"), vbCr)
macht einen "Type mismatch"
.Text = Join(WorksheetFunction.Transpose(Range("A2:A5")), " - ")
funktioniert.
Zu "Join" gibt google mir als besten Hit eine Erklärung von Peter Haserodt,
http://www.online-excel.de/excel/singsel_vba.php?f=20
Die Excel-Hilfe zu "Transpose" sagt, dass ich damit die "Inhalte-Einfügen-Transponieren" Befehle als Matrixfunktion dynamisch nutzen kann.
Nur leider verstehe ich immer noch nicht was hier passiert :-)
"Join" fügt in ein Array einen Zeichentrenner zwischen die Einträge, soweit hab ichs. Als Zeichentrenner benutzt du "vbCr" statt "," und veräppelts VBA damit ein bisschen, aber soweit hab ich auch das begriffen.
Nur...
Warum TRANSPOSE(rng) ? Und warum geht das nicht bei horizontalen Werten?
Magst du mich erleuchten?
Grüße,
Klaus M.vdT.

Anzeige
AW: was macht Transpose?
03.04.2013 11:07:53
Rudi
Hallo Klaus,
ein Range ist immer ein 2-dimensionales Array (1 to Zeilen, 1 to Spalten)
Range("A2:A5") hat als Array also die Dimensionen(1 to 4, 1 to 1).
Durch das Transponieren wird es in ein eindimensionales Array (0 to 3) umgewandelt.
Deshalb klappt Join(), da die Funktion nur ein eindimensionales Array verketten kann.
Das funktioniert so aber nur mit einspaltigen Bereichen.
Im Fall von C5:F5 hast du ein einzeiliges, mehrspaltiges Array. Das musst du zweimal transponieren.
.Text = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range("C5:F5"))), vbCr)
Transpose versagt übrigens bei Arrays mit mehr als 2^16 Elementen. Dann hilft nur eine Schleife, die aber auch nicht langsamer ist.
Gruß
Rudi

Anzeige
Danke sehr!
03.04.2013 11:21:52
Klaus
Hallo Rudi,
danke für die Erklärung!
Transpose wird hier also - entgegen seiner Bestimmung, einen Bereich um 90° zu drehen - missbraucht um eine Matrix zu bilden.
Das 2xTranspose funktioniert, leuchtet mir nach deiner Erklärung (1to4,1to1 - 0to3) ein. Obwohl ich intuitiv sagen würde, wenn ich etwas 90° nach links drehe und danach 90° nach rechts, ist es wieder genauso wie vorher ;-)
Aber vielen Dank, Transpose und Join versuche ich mir mal zu merken um "schleifenlos" zu füllen. Das müsste mit einer ComboBox doch auch gehen, oder? Nicht antworten, ich probier das einfach aus!
Transpose versagt übrigens bei Arrays mit mehr als 2^16 Elementen
Danke für die Warnung! Ich hab tatsächlich ein paar Dateien mit 100.000+ Zeilen bei denen mich das hätte einholen können.
Grüße,
Klaus M.vdT.

Anzeige
kleine Korrektur
03.04.2013 11:19:16
Rudi
Hallo,
Durch das Transponieren wird es in ein eindimensionales Array (0 to 3) umgewandelt.
stimmt nicht. 1 to 4 ist richtig.
Geh mal mit F8 durch und schau dir x im Lokalfenster an.
Sub aaaa()
Dim x
x = Range("A2:A5")
x = WorksheetFunction.Transpose(x)
x = Range("C5:F5")
x = WorksheetFunction.Transpose(x)
x = WorksheetFunction.Transpose(x)
End Sub

Gruß
Rudi

Anzeige
gelesen, nochmal danke AW: kleine Korrektur
03.04.2013 11:29:09
Klaus
Hallo Rudi,
gelesen, kopiert, angesehen. Nochmal danke, sehr aufschlussreich!
Grüße,
Klaus M.vdT.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Text Box in Excel VBA füllen


Schritt-für-Schritt-Anleitung

Um eine mehrzeilige Textbox in einer Excel Userform zu füllen, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge eine Userform hinzu und platziere eine TextBox (z.B. TextBox1) darauf.
  3. Aktiviere die mehrzeilige Funktion der TextBox, indem du die MultiLine-Eigenschaft auf True setzt.
  4. Fülle die TextBox mit den gewünschten Texten.

Hier ist ein Beispiel, wie du mehrere Zeilen in einer TextBox füllen kannst:

Private Sub UserForm_Initialize()
    With TextBox1
        .MultiLine = True
        .Text = "Test_1" & vbCr & "Test_2"
    End With
End Sub

Um die TextBox mit den Inhalten einer Spalte zu füllen, kannst du diesen Code verwenden:

Private Sub UserForm_Initialize()
    Dim r As Range
    Dim lrow As Long
    lrow = Sheets("Tabelle1").Cells(Sheets("Tabelle1").Rows.Count, 1).End(xlUp).Row
    With TextBox1
        .MultiLine = True
        For Each r In Range("A1:A" & lrow)
            .Text = .Text & r.Value & vbCr
        Next r
    End With
End Sub

Häufige Fehler und Lösungen

  • Problem: Nur die letzte Zeile wird angezeigt.

    • Lösung: Stelle sicher, dass du den Text mit & verkettest und vbCr für den Zeilenumbruch verwendest.
  • Problem: Fehlermeldung bei der Schleife.

    • Lösung: Überprüfe, ob der Bereich korrekt definiert ist und keine leeren Zellen in der Spalte vorhanden sind.
  • Problem: "Type mismatch" Fehler.

    • Lösung: Achte darauf, dass du die Funktion Join nur mit eindimensionalen Arrays verwendest.

Alternative Methoden

Eine alternative Methode für das Füllen einer Excel TextBox ist die Verwendung der Join-Funktion mit Transpose. Hier ist ein Beispiel:

Private Sub UserForm_Initialize()
    Dim rng As Range
    Set rng = Range(Sheets(1).Range("A2"), Sheets(1).Range("A2").End(xlDown))
    With TextBox1
        .MultiLine = True
        .Text = Join(WorksheetFunction.Transpose(rng), vbCr)
    End With
End Sub

Diese Methode ist besonders nützlich, um Zeilen aus einer Spalte in einer Userform schnell zu füllen, ohne eine Schleife zu verwenden.


Praktische Beispiele

  1. Füllen einer TextBox mit mehreren festen Texten:
Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
    TextBox1.Text = "Zeile 1" & vbCr & "Zeile 2" & vbCr & "Zeile 3"
End Sub
  1. Füllen einer TextBox mit Werten aus einer Excel-Tabelle:
Private Sub UserForm_Initialize()
    Dim cell As Range
    For Each cell In Sheets("Tabelle1").Range("A1:A10")
        If cell.Value <> "" Then
            TextBox1.Text = TextBox1.Text & cell.Value & vbCr
        End If
    Next cell
End Sub

Tipps für Profis

  • Nutze die Join-Funktion in Kombination mit Transpose, um den Code zu optimieren und Schleifen zu vermeiden.
  • Achte darauf, die MultiLine-Eigenschaft der TextBox zu aktivieren, bevor du mehrzeiligen Text hinzufügst.
  • Verwende vbCr oder vbNewLine als Zeilenumbruch, um die Lesbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich eine TextBox in einer Userform dynamisch füllen?
Du kannst die TextBox mit Werten aus einer Datenquelle, wie z.B. einer Excel-Tabelle, füllen, indem du die entsprechenden Zellen in einer Schleife durchläufst und den Text mit & kombinierst.

2. Was ist der Unterschied zwischen Transpose und Join?
Transpose wandelt einen mehrdimensionalen Bereich in ein eindimensionales Array um, während Join die Elemente eines Arrays zu einem String mit einem bestimmten Trennzeichen verbindet.

3. Kann ich eine TextBox auch mit Werten aus mehreren Spalten füllen?
Ja, dazu musst du jedoch sicherstellen, dass du die Werte korrekt transponierst, wenn sie aus einem mehrspaltigen Bereich stammen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige