ListBox befüllen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm ListBox MsgBox
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

Beiträge aus den Excel-Beispielen zum Thema "ListBox befüllen"