Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Autofilter richtig einsetzen

Betrifft: Autofilter richtig einsetzen von: Alex
Geschrieben am: 04.03.2008 20:00:38

Hallo Leute,

ich hab ein riesen Problem mit dem Autofilter, ich hoffe ich kann es richtig erklären.
Hier erst mal ein kleiner Ausschnitt aus dem Code:

If Filter.ComboBox2.Value = "Gewicht" Then
With Selection
.AutoFilter Field:=z, Criteria1:=Filter.ComboBox1.Value, _
Operator:=xlAnd
.AutoFilter Field:=y, Criteria1:=Filter.ComboBox3.Value, _
Operator:=xlAnd

End With

Nun möchte ich das er für die Variable "z" die passende Spalte auswäht. Also für Alter = Spalte B, Größe = Spalte C usw. Das Gleiche soll auch mit Variable "y" geschehen.
Wie mache ich das ? Ich zerbrech mir schon seit Stunden den Kopf!

Alex

  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 04.03.2008 22:50:04

Hallo Alex,
und was wenn du in deine combos zwei spalten machst? Erste mit dem Text (z.b. Alter) und zweite mit dem Nummer (z.b. 2 als Spalte B). D.h. in der Combo-Item wird man beide Infos haben, die man fuer den AutoFilter Field und Criteria braucht. Hilft das?
Gruss dan, cz.


  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 05.03.2008 09:35:24

äh, ja, kannst du mir da mal ein beispiel geben?
wie macht man denn in die combobox spalten rein?


  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 05.03.2008 10:42:56

Hallo,
hier ein Beispiel. Man braucht dazu eine UserForm mit dem ComboBox1.

Option Explicit

Private Sub UserForm_Initialize()
    Dim lst(1, 1) ' jetzt nur fuer zwei zeilen...
    
    lst(0, 0) = "Alter"
    lst(0, 1) = 2 ' ist immer die entsprechende Spaltennummer
    lst(1, 0) = "Groesse"
    lst(1, 1) = 3
    
    Me.ComboBox1.ColumnCount = 2 ' combo mit 2 spalten
    Me.ComboBox1.List = lst ' werte fuer combo 
    Me.ComboBox1.ColumnWidths = ";0" ' die zweite Spalte nicht zeigen
    
    ' oder hier eine andere Moeglichkeit wie man combo fillen kann:
' http://www.dailydoseofexcel.com/archives/2004/05/10/populating-multi-column-listboxcombobox/

    
End Sub



Private Sub ComboBox1_Change()
    Dim spalte As Integer
    Dim criteria As String
    
    spalte = 0
    criteria = ""
    
    ' die Combo-Werte uebernehmen, Me.ComboBox1.ListIndex gibt die ausgewaehlte zeile zurueck,
    ' falls nichts ausgewaehlt ist, ist es gleich -1
    If (Me.ComboBox1.ListIndex > -1) Then
    
        With Selection
        
            spalte = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1)
            criteria = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 0)
            
            .AutoFilter Field:=spalte, Criteria1:=criteria
            
        End With
    End If

End Sub




  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 06.03.2008 18:45:52

Hi,

ok, das funzt schon ganz gut, aber wie kann ich nun einen entsprechenden Wert auswählen?
Also sprich wenn ich das ganze jetzt auf "Gewicht" setzt, wie lese ich (am besten in eine weitere ComboBox) die Werte ein, die ich auswählen will??

Alex

Private Sub ComboBox1_Change()
    
    Dim spalte As Integer
    Dim criteria As String
    
    spalte = 0
    criteria = ""
    
    ' die Combo-Werte uebernehmen, Me.ComboBox1.ListIndex gibt die ausgewaehlte zeile zurueck,
    ' falls nichts ausgewaehlt ist, ist es gleich -1
    If (Me.ComboBox1.ListIndex > -1) Then
    
        With Selection
        
            spalte = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1)
            criteria = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 0)
            
            .Autofilter Field:=spalte, Criteria1:=criteria
            
        End With
    End If

End Sub




Private Sub UserForm_Initialize()

    Dim lst(1, 1) ' jetzt nur fuer zwei zeilen...
    
    lst(0, 0) = "Gewicht"
    lst(0, 1) = 3 ' ist immer die entsprechende Spaltennummer
    lst(1, 0) = "Größe"
    lst(1, 1) = 4
    
    Me.ComboBox1.ColumnCount = 2 ' combo mit 2 spalten
    Me.ComboBox1.List = lst ' werte fuer combo
    Me.ComboBox1.ColumnWidths = ";0" ' die zweite Spalte nicht zeigen
    
    End Sub




  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 06.03.2008 19:44:50

habs hinbekommen! juhuuuuuuuuuuuuuuu!

nur noch eine frage, kann ich das ganze auch Tabellenübergreifend machen? Sprich 1. Filter Tabelle1
2. Filter Tabelle 2 usw... ????

Alex


  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 07.03.2008 07:52:55

Hallo,
das freut mich dass es lauft :-).

Ich bin mir nicht sicher, ob ich die Frage mit den Tabellenübergreifenden filter richtig verstanden habe. Du hast eine User-form mit combos, wo die AutoFilters eingestellt werden, und willst jetzt die Combos nur fur ein bestimmtes sheet bunutzen? Beschreibe es mehr genau...

Gruss Dan, cz.


  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 07.03.2008 13:11:48

Ok, es ist so,

ich habe 5 Sheets. Jedes Sheet enthält ca. 250 Zeilen und ca. 20-25 Spalten.
In jedem Sheet sind die Spalten A und B gleich.
A = fortlaufende ID
B = Name

Nun frage ich mich ob ich einen Filter setzen kann, der mir z. B. sagt: Alter = 20 (steht in Sheet 1)
der mir nun alle mit 20 anzeigt. und dann einen weiteren Filter z.B. Gewicht (Steht in Sheet 2).

Ich weiß es wäre einfacher alles in ein Sheet zu packen, aber das wird mir sonst zu unübersichtlich!

Alex


  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 07.03.2008 20:03:05

Ok also du willst das die Combos werden mit dem Sheet verbunden? Das koennte man z.B. mit dem Tag des Combos machen. Du benutzt also eine UserForm wo die Combos sich befinden? Die vorgehensweise ist mir noch nicht ganz klar. Wie soll es funktionieren?
Gruss Dan, cz.


  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 08.03.2008 11:53:13

Hi,

also noch mal zur erklärung.
Momentan ist es so, das ich in ComboBox1 die Spalten auswählen kann (aus Sheet1) und in der ComboBox2 kann ich die werte der angegebenen Spalte auswählen (typische Autofilter funktion.
Nun hätte ich gernen in der ComboBox1 auch die Spalten des Sheets2, Sheets3, Sheets4, Sheets5.
Quasi einfach den Filter über alle Sheets erweitern.
Da die Namen in allen Sheets gleich sind, denke ich das man es realisieren könnte.
Alle 5 Sheets sind gleich aufgebaut! Spalte A und B sind überall gleich!

Alex


  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 09.03.2008 22:05:08

Hi,
also hier ein beispiel. Es ist aber nur beispiel, funktionieren wird es nicht ganz! Siehe die comments im code.


' es wird z.B. mit dem Command-button click gestartet...

Private Sub CommandButton1_Clict()
    Dim spalte As Integer
    Dim criteria As String
    
    spalte = 0
    criteria = ""
    
    ' die Combo-Werte uebernehmen, Me.ComboBox1.ListIndex gibt die ausgewaehlte zeile zurueck,
    ' falls nichts ausgewaehlt ist, ist es gleich -1
    If (Me.ComboBox1.ListIndex > -1 And Me.ComboBox2.ListIndex > -1) Then
    
        ' hier muss es anders sein, da du die spalten-nummer in der Combo1 hast
        ' und die werte in der Combo2, also wahrscheinlich so:
        ' >>> criteria = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 0) ???
        spalte = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1)
        criteria = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 0)
        
        ' hier werden einfach alle sheets durchgegangen und der
        ' Filter fuer die 'spalte' gesetzt
        Call SetFilterAllSheets(spalte, criteria)
    End If

End Sub



Private Sub SetFilterAllSheets(ByVal i_spalte As Integer, ByVal i_criteria As String) ' i_ ...  _
wie input parameter
    Dim wst As Worksheet
    Dim curReg As Range
    
    On Error GoTo SetFilterAllSheets_Error
    
    For Each wst In Worksheets
        
        ' damit dies mit der Current Region funzt, musessen deine daten
        ' in A1 beginnen, duerfen keine leere spalten bzw. leere zeilen enthalten...
        Set curReg = wst.Range("a1").CurrentRegion

        curReg.AutoFilter Field:=i_spalte, Criteria1:=i_criteria
    
    Next wst
    
    Exit Sub
    
SetFilterAllSheets_Error:
    
    MsgBox "error in SetFilterAllSheets, " & Err.Description, vbCritical, "Error"
  
End Sub




  

Betrifft: AW: Autofilter richtig einsetzen von: Alex
Geschrieben am: 10.03.2008 17:21:02

Hi,

vielen Dank für Deine Hilfe, aber ich habe es jetzt anders gelöst.
Ich behandle das ganze jetzt wie eine Datenbank, in der Excel nur noch die Infos enthält.
Alle Änderungen und was sonst noch zu machen ist, habe ich über UserForms gelöst.
Sprich alles in ein Sheet (das geht jetzt von Spalt A - CC") und alle Befehle kann ich
über seperate Userforms steuern, schien mir irgendwie einfacher.
Aber danke vielmals, deinen Code habe ich nicht so recht zum laufen gebracht.

Alex


  

Betrifft: AW: Autofilter richtig einsetzen von: dan
Geschrieben am: 11.03.2008 09:14:17

Hi Alex,
ist OK, haupsache es funzt wie du es brauchst!
Viel Erfolg, Dan, cz.


 

Beiträge aus den Excel-Beispielen zum Thema "Autofilter richtig einsetzen"