Herbers Excel-Forum - das Archiv

ListBox befüllen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox UserForm
Bild

Betrifft: ListBox befüllen
von: Erich M.

Geschrieben am: 17.04.2005 07:06:38
Hallo EXCEL-Freunde,
mit folgendem Code befülle ich eine ListBox:
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To Worksheets.Count
Me.lstTableList.AddItem Worksheets(i).Name
Next i
End Sub

Es werden alle vorhandenen Tabellen aufgelistet. Nun möchte ich folgendes erreichen:
1. Es sollen zwei Tabellen (Name = A und B) nicht aufgelistet werden.
2. Die restlichen Tabellen sollen alphabetisch aufgelistet werden.
Besten Dank für eine Hilfe!

mfg
Erich
EXCEL-Shareware und Freeware: http://www.toolex.de
EXCEL und Lottogewinne machen glücklich: http://48678.rapidforum.com
Bild

Betrifft: AW: ListBox befüllen
von: Hajo_Zi

Geschrieben am: 17.04.2005 09:27:30
Hallo Erich,
zu Punkt 1 mache ein If
zu Punkt 2 schreibe es erst in ein Array. Dazu folgender Ansatz.
Option Explicit
Option Compare Text
'   erstellt von Hajo.Ziplies@web.de
Private Sub CMD_Auslesen_Click()
Dim LoI As Long
For LoI = 0 To ListBox1.ListCount - 1
MsgBox ListBox1.List(LoI, 0)
Next LoI
End Sub
Private Sub UserForm_Initialize()
Dateiliste
End Sub
Sub Dateiliste()
Dim Verzeichnis() As String
Dim Anzahl As Integer
Dim I As Integer
Dim Dateiname As String
Anzahl = 0
'    Liste erstellen
Dateiname = Dir("E:\Eigene Dateien\Hajo\" & "*.xls")
I = 3
Do While Dateiname <> ""
'       Veränderung für DaPetra
'      z.B. Verwaltung.xls und Test.xls) falls sie vorhanden sind nicht anzeigen
'      und Anzeige ohne Dateityp
If Dateiname <> "Adresse.xls" And Dateiname <> "autoh.xls" Then
Anzahl = Anzahl + 1
ReDim Preserve Verzeichnis(1 To Anzahl)
'            Verzeichnis(Anzahl) = Mid(Dateiname, 1, Len(Dateiname) - 4)
Verzeichnis(Anzahl) = Dateiname
End If
Dateiname = Dir
Loop
'   Dateinamen sortieren
Sort_A_Z Verzeichnis, LBound(Verzeichnis), UBound(Verzeichnis)  ' Lbound kleinster Wert,UBound Größter Wert
'   Dateinamen in Listbox1 schreiben
For I = Anzahl To 1 Step -1
ListBox1.AddItem Verzeichnis(I)
Next I
End Sub
Public Sub Sort_Z_A(SortArray, L, R)
'   sortieren von Z bis A
'   von GerdZ Herber.de
Dim I, J, x, y
I = L
J = R
x = SortArray((L + R) / 2)
While (I <= J)
While (SortArray(I) < x And I < R)
I = I + 1
Wend
While (x < SortArray(J) And J > L)
J = J - 1
Wend
If (I <= J) Then
y = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = y
I = I + 1
J = J - 1
End If
Wend
If (L < J) Then Call Sort_Z_A(SortArray, L, J)
If (I < R) Then Call Sort_Z_A(SortArray, I, R)
End Sub
Public Sub Sort_A_Z(SortArray, L, R)
'   sortieren von A bis Z
'   von GerdZ Herber.de
Dim I, J, x, y
I = L
J = R
x = SortArray((L + R) / 2)
While (I <= J)
While (SortArray(I) > x And I < R)
I = I + 1
Wend
While (x > SortArray(J) And J > L)
J = J - 1
Wend
If (I <= J) Then
y = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = y
I = I + 1
J = J - 1
End If
Wend
If (L < J) Then Call Sort_A_Z(SortArray, L, J)
If (I < R) Then Call Sort_A_Z(SortArray, I, R)
End Sub


Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


Bild

Betrifft: Danke Hajo - o.T.
von: Erich M.
Geschrieben am: 17.04.2005 10:12:32
mfg
Erich
EXCEL-Shareware und Freeware: http://www.toolex.de
EXCEL und Lottogewinne machen glücklich: http://48678.rapidforum.com
Bild

Betrifft: AW: ListBox befüllen
von: Nepumuk

Geschrieben am: 17.04.2005 09:34:03
Hallo Erich,
da eine Listbox ein Array darstellt, kann diese ganz einfach sortiert werden:


Option Explicit
Private Sub UserForm_Activate()
    Dim intIndex As Integer
    For intIndex = 1 To ThisWorkbook.Sheets.Count
        With Sheets(intIndex)
            If .Name <> "aaa" And .Name <> "xxxx" Then ListBox1.AddItem .Name
        End With
    Next
    Call prcSort(0, ListBox1.ListCount - 1)
End Sub
Private Sub prcSort(intLBorder As Integer, intUBorder As Integer)
    Dim intIndex1 As Integer, intIndex2 As Integer, strBuffer As String, strTemp As String
    intIndex1 = intLBorder
    intIndex2 = intUBorder
    strTemp = UCase$(ListBox1.List(Fix(intLBorder + intUBorder) / 2))
    Do
        Do While UCase$(ListBox1.List(intIndex1)) < strTemp
            intIndex1 = intIndex1 + 1
        Loop
        Do While strTemp < UCase$(ListBox1.List(intIndex2))
            intIndex2 = intIndex2 - 1
        Loop
        If intIndex1 <= intIndex2 Then
            strBuffer = ListBox1.List(intIndex1)
            ListBox1.List(intIndex1) = ListBox1.List(intIndex2)
            ListBox1.List(intIndex2) = strBuffer
            intIndex1 = intIndex1 + 1
            intIndex2 = intIndex2 - 1
        End If
    Loop Until intIndex1 > intIndex2
    If intLBorder < intIndex2 Then Call prcSort(intLBorder, intIndex2)
    If intIndex1 < intUBorder Then Call prcSort(intIndex1, intUBorder)
End Sub


Gruß
Nepumuk
Bild

Betrifft: Ergänzung?
von: Erich M.

Geschrieben am: 17.04.2005 10:14:47
Hallo Nepumuk,
zunächst danke - funktioniert.
Nun möchte ich den User auf einen Fehler hinweisen, wenn er in der ListBox1 keine
Tabelle auswählt; hier bekomme ich aber Laufzeitfehler 9:
Private Sub btnCreateTableOfContents_Click()
Dim wks As Worksheet
Set wks = Worksheets("" & ListBox1 & "")
If wks Is Nothing Then
MsgBox "Keine Zelle gewählt", vbInformation + vbOKOnly, "Abbruch"
Unload Me
Exit Sub
End If
wks.Visible = True
On Error Resume Next
Unload Me
End Sub

Besten Dank nochmal!
mfg
Erich
EXCEL-Shareware und Freeware: http://www.toolex.de
EXCEL und Lottogewinne machen glücklich: http://48678.rapidforum.com
Bild

Betrifft: AW: Ergänzung?
von: Nepumuk

Geschrieben am: 17.04.2005 10:33:56
Hallo Erich,
so?


Private Sub btnCreateTableOfContents_Click()
    If ListBox1.Text <> "" Then
        Worksheets(ListBox1.Text).Visible = True
        Unload Me
    Else
        MsgBox "Keine Tabelle ausgewählt.", 48, "Hinweis"
    End If
End Sub


Gruß
Nepumuk
Bild

Betrifft: Danke Nepumuk - funktioniert! o.T.
von: Erich M.

Geschrieben am: 17.04.2005 12:46:23
mfg
Erich
EXCEL-Shareware und Freeware: http://www.toolex.de
EXCEL und Lottogewinne machen glücklich: http://48678.rapidforum.com
 Bild
Excel-Beispiele zum Thema "ListBox befüllen"
Mehrfachauswahl aus ListBox auslesen Gefilterte Daten in eine ListBox einlesen
Dateien aus Listbox auslesen und öffnen Listbox-Eintrag durch Mausbewegung markieren
ListBox-Einträge auswechseln Horizontal angeordnete Elemente in eine ListBox übernehmen
Tabellenblattnamen in eine ListBox einlesen ListBox bei Eintrag erweitern