Anzeige
Archiv - Navigation
1304to1308
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
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

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

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

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

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.

15 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige