Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
596to600
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
596to600
596to600
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ListBox befüllen

ListBox befüllen
17.04.2005 07:06:38
Erich
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox befüllen
17.04.2005 09:27:30
Hajo_Zi
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.


Anzeige
AW: ListBox befüllen
17.04.2005 09:34:03
Nepumuk
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
Anzeige
Ergänzung?
17.04.2005 10:14:47
Erich
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
Anzeige
AW: Ergänzung?
17.04.2005 10:33:56
Nepumuk
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige