Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1752to1756
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
Inhaltsverzeichnis

ComboBox filtern

ComboBox filtern
20.04.2020 17:19:52
Peer
Hallo.
Ich lese den Unterordner ("Protokolle") der Mappe aus und schreibe den Inhalt in eine ComboBox in einer UF. Soweit alles gut.
Nun möchte ich die Einträge der ComboBox danach filtern, was am Anfang jeder Datei benannt ist (mit Left$)
Im Beispiel werden alle Word-Dateien mit der Extension ".docx" und ".docm" in die ComboBox im Activate Event der UF geladen. Dabei gibt es Dateien, die mit "RF", "MF 1" und "046" beginnen.
Dies möchte ich nun mit den jeweiligen OptionButton filtern.
Kann mir jemand auf die Sprünge helfen?
Wie gehe ich das an?
Die Beispielmappe muss ich als zip-File schicken, in der die Beispielmappe und drei Word-Dokumente sind. Die drei Worddokumente müsst ihr notfalls, wenn nicht schon geschehen, in ein erstellten Unterordner "Protokolle" legen.
Die UF startet ihr über frm_Teilnehmer.
https://www.herber.de/bbs/user/136898.zip
LG
Peer

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox filtern
20.04.2020 18:01:26
Nepumuk
Hallo Peer,
so?
Private Sub opt_TN_Beschein_Click()
    
    Dim lngIndex As Long
    
    If opt_TN_Beschein.Value Then
        
        ProtokollFilter = "RF"
        
        With cbx_Protokolle
            
            For lngIndex = .ListCount - 1 To 0 Step -1
                
                If Left$(.List(lngIndex, 0), Len(ProtokollFilter)) <> _
                    ProtokollFilter Then Call .RemoveItem(lngIndex)
                
            Next
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: ComboBox filtern
20.04.2020 18:40:17
Peer
Hallo Nepumuk.
Vielen Dank für deine Hilfe.
Ich habe es gleich an alle drei Filter eingepasst.
Aber warum ist nach Auswahl eines Filters bei Wechsel des Filters die ComboBox leer?
Muss ich immer nach Wahl des Filters die ListBox neu einlesen?
LG
Peer
AW: ComboBox filtern
20.04.2020 18:47:39
Nepumuk
Hallo Peer,
ich würde das anders machen:
Die Dateinamen in ein Array einlesen. Das Array beim Filterwechsel an die Combobox übergeben und dann filtern.
Das ist auf alle Fälle schneller als die Dateien jedes mal neu einzulesen.
Gruß
Nepumuk
AW: ComboBox filtern
20.04.2020 19:10:21
Peer
Hallo Nepumuk.
Wie kann so etwas aussehen. Dann muss das Activate Event aber raus?
Ich habe aus dem Netz etwas gefunden und angepasst. Wie muss ich es dann in mein derzeitige Mappe einbauen?
Public Sub ProtokolleAuslesen()
Dim strPath       As String
Dim strFile       As String
Dim varTabName()  As Variant
Dim iName         As Variant
strPath = ThisWorkbook.Path & "\" & "Protokolle"
strFile = Dir(strPath & "*.docx" & "*.docm")
Do Until strFile = ""
ReDim Preserve varTabName(iName)
varTabName(iName) = Left(strFile, Len(strFile) - 4)
iName = iName + 1
strFile = Dir
Loop
If iName > 0 Then MsgBox Join(varTabName)
End Sub
LG
Peer
Anzeige
AW: ComboBox filtern
20.04.2020 19:40:16
Nepumuk
Hallo Peer,
ganz oben im Modul des UserForms:
Private astrFiles() As String

Das Activate des UserForms so ändern:
Private Sub UserForm_Activate()
    Dim strFilename As String
    Dim ialngCounter As Long
    
    '**** ComboBox Protokolle füllen**************************
    
    strFilename = Dir$(ThisWorkbook.Path & "\" & "Protokolle\*.doc*")
    
    Do Until strFilename = vbNullString
        
        Redim Preserve astrFiles(ialngCounter)
        
        astrFiles(ialngCounter) = strFilename
        
        ialngCounter = ialngCounter + 1
        
        strFilename = Dir$
        
    Loop
    
    cbx_Protokolle.List = astrFiles
    
    'ComboBox Protokolle füllen ENDE ---------------------------------------
    
    txt_AustellOrt.Text = Worksheets("Trainer").Cells(1, 4).Text '"Mering"
    
End Sub

Und Filtern dann so:
Private Sub opt_TN_Beschein_Click()
    
    Dim lngIndex As Long
    
    If opt_TN_Beschein.Value Then
        
        ProtokollFilter = "RF"
        
        With cbx_Protokolle
            
            Call .Clear
            
            .List = astrFiles
            
            For lngIndex = .ListCount - 1 To 0 Step -1
                
                If Left$(.List(lngIndex, 0), Len(ProtokollFilter)) <> _
                    ProtokollFilter Then Call .RemoveItem(lngIndex)
                
            Next
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: ComboBox filtern
20.04.2020 20:32:36
Peer
Hallo Nepumuk.
Vielen Dank. Du hast mir sehr geholfen.
Kurze Frage noch?
Du hast im opt_TN_Beschein gleich nach der With Anweisung

Call .clear
eingefügt. Warum Call?
VG
Peer
AW: ComboBox filtern
20.04.2020 21:11:26
Nepumuk
Hallo Peer,
weil Claer eine Sub ist und ich diese aus Gewohnheit mit Call aufrufe.
Gruß
Nepumuk
AW: ComboBox filtern
20.04.2020 21:19:54
Daniel
ist Clear hier nicht eher eine Methode (des Range-Objektes)?
gruß Daniel
AW: ComboBox filtern
21.04.2020 03:39:56
Nepumuk
Hallo Daniel,
wie kommst du darauf?
Userbild
Gruß
Nepumuk
Anzeige
AW: ComboBox filtern
21.04.2020 07:12:43
Daniel
Naja genau durch diese Auflistung.
Daraus geht doch klar hervor:
Clear ist keine eigenständige Subprozedur, sondern ein Element eines Objekets.
Jeders Obejekt in Excel hat die drei Elememttypen: Eigenschaften, Methoden und Events (siehe hierzu auch die Dokumentation), in deinem Screenshot ist der Elementtyp durch das vorangestellte Icon markiert.
Außerdem, wäre Clear eine eigenständige Subprozedur analog den selbstgeschriebenen Subprozeduren, dann müsste der Aufruf doch lauten: "Clear Objekt" und nicht "Objekt.Clear" ?
Gruß Daniel
AW: ComboBox filtern
21.04.2020 07:27:57
Nepumuk
Hallo Daniel,
Clear ist die Sub der Klasse ComboBox. Aber klar, mit Klassen kennst du dich nicht aus, auch wenn du sie andauernd benutzt.
Gruß
Nepumuk
Anzeige
AW: ComboBox filtern
21.04.2020 08:32:22
Daniel
Gut wenn Methode = Sub, dann mag das so sein.
Trotzdem stellt sich die Frage, warum benutzt du hier Call, obwohl du das nicht tun musst?
Welchen Vorteil oder Nutzen hast du davon?
Ich verwende beispielsweise Call nur für Aufruf selbstgeschriebener Subs während ich originäre VBA-Subs immer ohne aufrufe, damit auch im Quellcode dies gleich erkenntlich ist.
Gruß Daniel
AW: ComboBox filtern
21.04.2020 09:33:08
Nepumuk
Hallo Daniel,
der eine machts so der andere so.
Gruß
Nepumuk
AW: ComboBox filtern
21.04.2020 10:27:55
Daniel
OK, du machst es halt einfach so, ohne speziellen Grund.
Gruß Daniel
AW: ComboBox filtern
20.04.2020 21:58:52
Peer
Ok, vielen Dank
Schönen Abend.
Peer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige