Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

senkrechte Trennlinie in Listbox einfüge

Betrifft: senkrechte Trennlinie in Listbox einfüge von: reiner
Geschrieben am: 08.11.2020 15:22:21

hallo Leute,

eine Listbox wird nach vorgegebenen Auswahlkriterien befüllt:

Zeile | Land | Stadt | Breite N/S | Länge O/W | Zeitzone

With lstSuchfunktion
.ColumnWidths = "35;180;190;65;20;65;20;15;40"
End With

    Do
      .AddItem RnGF.Offset(0, 0).Address 'Zeilennummer
      Zeilennummer = Mid(RnGF.Offset(0, 0).Address, 4) '$-Zeichen und Buchstaben entfernen
      .List(.ListCount - 1, 0) = Zeilennummer
      .List(.ListCount - 1, 1) = RnGF.Offset(0, 0).Value 'Land
      .List(.ListCount - 1, 2) = RnGF.Offset(0, 1).Value 'Stadt
      .List(.ListCount - 1, 3) = RnGF.Offset(0, 3).Text 'Breite
      .List(.ListCount - 1, 4) = RnGF.Offset(0, 4).Value 'N / S
      .List(.ListCount - 1, 5) = RnGF.Offset(0, 6).Text 'Länge
      .List(.ListCount - 1, 6) = RnGF.Offset(0, 7).Text 'O / W
      .List(.ListCount - 1, 7) = "Zz: " & RnGF.Offset(0, 8).Value 'Zeitzone
    Loop While Not RnGF Is Nothing And strFirst <> RnGF.Address
Für eine eindeutige Zuordnung würde ich gern senkrechte Linien zwischen den einzelnen Spalten in die Listbox einfügen, was aber nach meiner Kenntnis mit den bestehenden Einstellmöglichkei-ten der LB nicht realisierbar ist.
Kennt jemand eine Möglichkeit in den oben unter ".ColumnWidths" aufgeführten Abständen eine senkrechte Linie z. B. bei jedem Durchlauf der Do .. Loop -Schleife mit dem Zeichen „|“ auf der Tastatur unten links einzufügen?

Wie z.B. :
   Do
      .AddItem RnGF.Offset(0, 0).Address 'Zeilennummer
      Zeilennummer = Mid(RnGF.Offset(0, 0).Address, 4) '$-Zeichen und Buchstaben entfernen
      .List(.ListCount - 1, 0) = Zeilennummer
.ColumnWidths =35	= „|“
      .List(.ListCount - 1, 1) = RnGF.Offset(0, 0).Value 'Land
.ColumnWidths = 180 =  „|“
      .List(.ListCount - 1, 2) = RnGF.Offset(0, 1).Value 'Stadt
usw.
      .List(.ListCount - 1, 3) = RnGF.Offset(0, 3).Text 'Breite
usw.
      .List(.ListCount - 1, 4) = RnGF.Offset(0, 4).Value 'N / S
      .List(.ListCount - 1, 5) = RnGF.Offset(0, 6).Text 'Länge
      .List(.ListCount - 1, 6) = RnGF.Offset(0, 7).Text 'O / W
      .List(.ListCount - 1, 7) = "Zz: " & RnGF.Offset(0, 8).Value 'Zeitzone
    Loop While Not RnGF Is Nothing And strFirst <> RnGF.Address
mfg
reiner

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: Nepumuk
Geschrieben am: 08.11.2020 17:08:08

Hallo Reiner,

versuch es mal so:

Do
    .AddItem RnGF.Row 'Zeilennummer
    .List(.ListCount - 1, 1) = "| " & RnGF.Offset(0, 0).Value 'Land
    .List(.ListCount - 1, 2) = "| " & RnGF.Offset(0, 1).Value 'Stadt
    .List(.ListCount - 1, 3) = "| " & RnGF.Offset(0, 3).Text 'Breite
    .List(.ListCount - 1, 4) = "| " & RnGF.Offset(0, 4).Value 'N / S
    .List(.ListCount - 1, 5) = "| " & RnGF.Offset(0, 6).Text 'Länge
    .List(.ListCount - 1, 6) = "| " & RnGF.Offset(0, 7).Text 'O / W
    .List(.ListCount - 1, 7) = "| " & "Zz: " & RnGF.Offset(0, 8).Value 'Zeitzone
Loop Until strFirst = RnGF.Address

Die zusätzlichen Zeichen musst du so abschneiden:

With ListBox1
    TextBox1.Text = Mid$(.List(.ListIndex, 1), 4)
End With

Gruß
Nepumuk

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: reiner
Geschrieben am: 08.11.2020 17:32:57

hallo Nepumuk,

erstmal vielen Dank für den Vorschlag; es wird das Symbol "|" vor den jeweiligen Eintrag eingefügt.
Es ist aber wohl nicht möglich das Symbol entsprechend der in ".ColumnWidths" aufgeführten Spaltenbreite einzufügen, das ist schade.

Ich markiere die Anfrage daher vorerst noch als ungelöst, werde aber wohl damit leben müssen dass meine Vorstellung nicht verwirklicht werden kann.

Nochmals vielen Dank
reiner

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: onur
Geschrieben am: 08.11.2020 18:35:47

Wenn du willst, dass der Strich immer an der selben Stelle gesetzt wird, musst du die Schriftart der Listbox auf eine Monospace-Schriftart setzen (z.B. Typewriter_Condensed).

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: reiner
Geschrieben am: 08.11.2020 18:51:43

hallo onur,

ich habe die Schriftart wie von dir empfohlen auf "Typewriter_Condensed" umgestellt, aber wie stelle ich nun die senkrechten Trennstriche "immer an der selben Stelle" dar?
Ich muss doch die Position der Trennstriche vorgeben, aber wie?

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: onur
Geschrieben am: 08.11.2020 18:58:35

Statt z.B.
.List(.ListCount - 1, 3) = "Hallo"
das
.List(.ListCount - 1, 3) = "|" & "Hallo"
Immer (ausser bei Spalte 1) am Anfang jedes Eintrages.

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: onur
Geschrieben am: 08.11.2020 18:59:33

Dan brauchst du nicht einmal Monospace-Fonts.

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: reiner
Geschrieben am: 08.11.2020 19:02:48

hallo onur,

schau mal auf den Beitrag von Nepumuk 08.11.2020 17:08:08

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: onur
Geschrieben am: 08.11.2020 19:06:56

Stimmt, sehe ich jetzt auch,
Du willst sie wohl immer am Ende hinzufügen?
Das wäre unnötig viel komplizierter.
Du könntest aber auch mehrere Listboxen nehmen und sie per VBA verknüpfen, so dass, wenn ein Eintrag ausgewählt wird, alle anderen Listboxen mitziehen.

Betrifft: AW: senkrechte Trennlinie in Listbox einfüge
von: Daniel
Geschrieben am: 08.11.2020 23:36:06

HI

meines wissens nach ist es nicht möglich, so einen Spaltentrenner einzufügen.
der Workaround wäre, dass keinen Spaltentrenner einfügst, sondern echte Listboxspalten und diese mit dem Text "|" füllst sowie die Spaltenbreite in den ColumnWidth entsprechend schmal einstellst.

problem dabei ist, dass sich damit die Anzahl der Spalten verdoppelt (fast) und wenn du über 10 Spalten kommst, kannst du nicht mehr mit .AddItem arbeiten kannst, sondern die Daten über ein Array in die Listbox schreiben musst.

das geht aber auch im Nachgang, wenn du die Listbox befüllt hast, danach diesen Code ausführen:
dim arr1, arr2
dim z as long
dim s as long

arr1 = Listbox1.List
redim arr2(ubound(arr1, 1), 2 * ubound(arr1, 2) - 1)
for z = 0 to ubound(arr1, 1)
    for s = 0 to ubound(arr1, 2) - 1
        arr2(z, s * 2) = arr1(z, s)
        arr2(z, s * 2 + 1) = "|"
    next
    arr2(z, s * 2) = arr1(z, s)
next
Listbox1.List = arr2
die ColumnWidth musst du halt entsprechend einstellen.

oder noch einfacher: füge den Trennstrich ab der 2. Spalte am Anfang jedes Textes hinzu.
wenn du die Werte verarbeitest, kannst du ihn wieder entfernen.
 .List(.ListCount - 1, 1) = "|" & RnGF.Offset(0, 0).Value 'Land
Gruß Daniel

Betrifft: Danke dir sowie "Nepumuk" und "onur"
von: reiner
Geschrieben am: 09.11.2020 10:23:06

hallo Daniel,



ich muss mich damit abfinden dass Excel keine Möglichkeit bietet einen Trennstrich über die Einstellungen einzufügen.

Ich habe mich nun entschieden deinen Vorschlag (wie auch schon entsprechend von "Nepumuk" und "onur" angeregt) umzusetzen und in einer nachfolgenden Abarbeitung des Programmcodes den Trennstrich wieder zu entfernen; das funktioniert.
 .List(.ListCount - 1, 1) = "|" & RnGF.Offset(0, 0).Value 'Land
danke für deinen Beitrag

reiner

Beiträge aus dem Excel-Forum zum Thema "senkrechte Trennlinie in Listbox einfüge"