Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Geniale Textboxauffüllung mit 2 Spalten
#1
Hallo VBA Genies,

beim Stöbern in eurem Forum bin ich auf folgenden Code zur Auffüllung einer Textbox gestoßen:

Code:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)

Dieser Code ist einfach und super. Das Problem: Ich bräuchte so etwas kurzes und knappes
für 2 Spalten, also A und B. Der Inhalt der Textbox soll dann so aussehen:
Inhalt Zelle A1
Inhalt Zelle B1
Inhalt Zelle A2
Inhalt Zelle B2
usw.
Antwortento top
#2
Hallo,

das dürfte nur mit einer Schleife möglich sein.

Man kann die Inhalte erst in einem Aerray sammeln, dann dieses Array auf die gleiche Art in die Textbox schreiben. Da, wo den Code gefunden hast, solltest Du auch den Weg über Arrays finden.
Gruß Atilla
Antwortento top
#3
Hallo nochmal,

Auf folgender Seite findest Du einiges zu Feldern und Arrays. Über Join müsste da auch etwas zu finden sein, glaube ich: www.online-excel.de
Gruß Atilla
Antwortento top
#4
Hallo,

ich finde es schon grenzwertig, eine TextBox mit einer Spalte zu füllen.
Dafür und erst recht für mehrere Spalten ist eine ListBox die 1. Wahl. Wink
Zu Arrays guckst Du: Felder - Arrays (1) - Einführung und LBound/UBound

Gruß Uwe
Antwortento top
#5
Hallo Uwe,
möchte nochmal nachfragen warum du den Code
Code:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)

für "grenzwertig" hältst. Schließlich stammt er doch von dir selbst.

vgl. den Thread Steuerung der Anzeige einer Textbox durch Zeilenauswahl.
Was ich suche ist eigentlich nur einen möglichst effizienten Code der mir abwechselnd
die Inhalte aus den Spalten von A1 bis B10 in einer Textbox untereinanderschreibt.
Antwortento top
#6
Hallo,

ich hielt nirgendwo meinen Code für grenzwertig.
Und wie Atilla schon schrieb, geht es da nicht ohne Schleifen.
Ich muss aber zugeben, dass ich das mit dem zeilenweisen Anordnen der Spalten überlas.

Code:
Sub MehrereSpaltenZeilenweiseInTextbox()
  Dim i As Long, j As Long
  Dim varQ As Variant, varZ() As Variant
  varQ = Range("A1:B9").Value
  ReDim varZ(1 To UBound(varQ, 1) * UBound(varQ, 2))
  For i = 1 To UBound(varQ, 1)
    For j = 1 To UBound(varQ, 2)
      varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)
    Next j
  Next i
  TextBox1 = Join(varZ, vbNewLine)
End Sub

Gruß Uwe
Antwortento top
#7
Hallo,

zunächst einmal vielen Dank für den Code. Funktioniert, soweit alles super. Aber ich möchte
die Dinge auch gerne verstehen und frage mich schlicht und einfach wie man diese Codezeile
herleiten könnte.
Code:
varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)

Muss man so etwas als Programmierer einfach wissen? Bevor einige Routiniers anfangen zu gähnen,
so trivial finde ich die Umwandlung eines 2 dimensionalen in ein 1 dimensionales Feld nicht.
Antwortento top
#8
Hallo,

wenn das zu kompliziert wird, kann man auch einfach eine weitere Variable als normalen Zähler einsetzen.
Das ist vermutlich sogar performanter. Aber mächtig gewaltig sieht die erste Variante schon aus. Wink

Code:
Sub MehrereSpaltenZeilenweiseInTextbox_2()
  Dim i As Long, j As Long, k As Long
  Dim varQ As Variant, varZ() As Variant
  varQ = Range("A1:B9").Value
  ReDim varZ(1 To UBound(varQ, 1) * UBound(varQ, 2))
  For i = 1 To UBound(varQ, 1)
    For j = 1 To UBound(varQ, 2)
      k = k + 1
      varZ(k) = varQ(i, j)
    Next j
  Next i
  TextBox1 = Join(varZ, vbNewLine)
End Sub

Gruß Uwe
Antwortento top
#9
Hallo,

anbei eine ultraleichte Methode der alternierenden Textboxauffüllung aus den Spalten A und B, mittels Verwendung einer leicht abgeänderten arithmetrischen Reihe und des Mod-Operators:

Code:
Sub Textboxauffüllung()
For i = 1 To 20
TextBox1 = TextBox1 & " " & Cells(Int((i + 1) * 0.5), (i - 1) Mod 2 + 1).Value & vbLf
Next i
End Sub

(TextBox1 vorher auf Multiline stellen, nicht vergessen)
[-] Folgende(r) 1 Benutzer sagt Danke an ratrad für diesen Beitrag:
  • SonjaFido
Antwortento top
#10
Hallo Leute,

habe gerade mal etwas Code ausprobiert. Dabei ist mir aufgefallen, dass ein spaltenweises Textbox auffüllen
wie beschrieben einwandfrei funktioniert, nicht aber ein zeilenweises. Wieso?

Code:
'Spaltenweise funktioniert:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)
'Zeilenweise funktioniert nicht:  Wieso? Ist doch eigentlich das Gleiche!
TextBox1 = Join((Range("A1:F1").Value), vbLf)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste