Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Autofiltereinstellungen auslesen

Frage Entwicklung VB for Applications

Mitglied: chef1568

chef1568 (Level 1) - Jetzt verbinden

10.11.2014, aktualisiert 15:54 Uhr, 928 Aufrufe, 9 Kommentare

Hallo,

ich habe derzeit ein Problem mit dem Auslesen eines Autofilters.

01.
Dim Wert_Filter1() As String, Wert_Filter2() As String 
02.
Dim Wert_UndOder(), Filteranzahl As Integer 
03.
Dim i As Integer, Filter As Object, ZeileAutoFilter As Range 
04.
Dim FilterOff As Boolean 
05.
 
06.
With Worksheets("Fahrzeugübersicht") 
07.
    If .FilterMode = True Then 
08.
        Set ZeileAutoFilter = .Rows(1) 'Zeile Autofilter 
09.
        Filteranzahl = .Autofilter.Filters.Count 
10.
           
11.
        ReDim Preserve Wert_Filter1(Filteranzahl) 
12.
        ReDim Preserve Wert_Filter2(Filteranzahl) 
13.
        ReDim Preserve Wert_UndOder(Filteranzahl) 
14.
           
15.
        If .AutoFilterMode Then 
16.
            i = 1 
17.
            For Each Filter In .Autofilter.Filters 
18.
                If Filter.On Then 
19.
                    Wert_Filter1(i) = Filter.Criteria1 
20.
                    Wert_UndOder(i) = Filter.Operator 
21.
                     
22.
                    On Error Resume Next 
23.
                    Wert_Filter2(i) = Filter.Criteria2 
24.
                End If 
25.
                i = i + 1 
26.
            Next 
27.
          End If 
28.
           
29.
          .Autofilter = False 
30.
    End If 
31.
End With
Hier habe ich das Problem dass, sobald mehr als 2 Kriterien pro Filter aktiv sind funktioniert das Script nicht mehr.
Mitglied: 114757
10.11.2014, aktualisiert um 13:33 Uhr
Hallo Chef,
Zitat von chef1568:
Hier habe ich das Problem dass, sobald mehr als 2 Kriterien pro Filter aktiv sind funktioniert das Script nicht mehr.
verstehe ich nicht, wie soll ein AutoFilter mehr wie 2 Kriterien haben, das geht doch gar nicht ?? 2 ist das Maximum pro Filter.
Ob ein Filter ein oder zwei Kriterien hat kannst du mit Filter.Count abfragen, und dann mit einer IF-Abfrage abfangen.

01.
'..... 
02.
               If Filter.On Then 
03.
                    Wert_Filter1(i) = Filter.Criteria1 
04.
                    if Filter.Count > 1 then 
05.
                       Wert_UndOder(i) = Filter.Operator 
06.
                       Wert_Filter2(i) = Filter.Criteria2 
07.
                    End if 
08.
                End If 
09.
'......
Gruß jodel32
Bitte warten ..
Mitglied: chef1568
10.11.2014 um 14:43 Uhr
Hallo,

Ich meinte wenn Filter.count > 2 ist bekomme ich die Fehlermeldung "Typen unverträglich" in folgender Codezeile:
01.
Wert_Filter1(i) = Filter.Criteria1
Mit freundlichen Grüßen
Bitte warten ..
Mitglied: 114757
LÖSUNG 10.11.2014, aktualisiert um 15:54 Uhr
Zitat von chef1568:
Ich meinte wenn Filter.count > 2 ist bekomme ich die Fehlermeldung "Typen unverträglich" in folgender
Codezeile:
Ach so OK, du musst deine Array-Variablen als Variant anstatt String deklarieren, weil du bei mehreren Werten (bzw. xlFilterValues) ein Array zugeliefert bekommst, deswegen der Typen-Fehler. Du kannst ja ein Array nicht einer String-Variablen zuweisen.
01.
dim Wert_Filter1() as Variant 
02.
dim Wert_Filter2() as Variant
Bitte warten ..
Mitglied: chef1568
10.11.2014 um 15:58 Uhr
Super, jetzt funktioniert das Erfassen des Filters schonmal.

Leider habe jetzt beim Wiederherstellen der Filter ein Problem mit dem Variant in Zeile 3 "Typen unverträglich"
01.
With Worksheets("Fahrzeugübersicht") 
02.
        For i = 1 To Filteranzahl 
03.
            If Wert_Filter1(i) = "" Then 
04.
                ZeileAutoFilter.Autofilter Field:=i 
05.
            Else 
06.
                If Wert_Filter2(i) = "" Then 
07.
                    ZeileAutoFilter.Autofilter Field:=i, Criteria1:=Wert_Filter1(i) 
08.
                Else 
09.
                    ZeileAutoFilter.Autofilter Field:=i, Operator:=Wert_UndOder(i), _ 
10.
                    Criteria1:=Wert_Filter1(i), Criteria2:=Wert_Filter2(i) 
11.
                End If 
12.
            End If 
13.
        Next i 
14.
End With
Danke schonmal
Bitte warten ..
Mitglied: Eintagsfliege
10.11.2014 um 16:11 Uhr
Hallo chef1568 !

Variant = Empty:
01.
If IsEmpty(Wert_Filter1(i)) Then
Grüße Dieter
Bitte warten ..
Mitglied: chef1568
10.11.2014, aktualisiert um 16:51 Uhr
Also der Code läuft jetzt zwar ohne Fehler durch, jedoch werden mir nicht mehr die ursprünglich gesetzten Filter wiederhergestellt.
Irgendwas wird hier verworfen.

Hier nochmal der komplette Code:
01.
Sub Autofilter() 
02.
'################################################################### 
03.
'####################### Autofilter einlesen ####################### 
04.
'################################################################### 
05.
Dim Wert_Filter1(), Wert_Filter2(), Wert_UndOder() As Variant 
06.
Dim Filteranzahl As Integer 
07.
Dim i As Integer, Filter As Object, ZeileAutoFilter As Range 
08.
Dim FilterOff As Boolean 
09.
 
10.
With Worksheets("Fahrzeugübersicht") 
11.
    If .FilterMode = True Then 
12.
        Set ZeileAutoFilter = .Rows(1) 'Zeile Autofilter 
13.
        Filteranzahl = .Autofilter.Filters.Count 
14.
           
15.
        ReDim Preserve Wert_Filter1(Filteranzahl) 
16.
        ReDim Preserve Wert_Filter2(Filteranzahl) 
17.
        ReDim Preserve Wert_UndOder(Filteranzahl) 
18.
          On Error Resume Next 
19.
        If .AutoFilterMode Then 
20.
            i = 1 
21.
            For Each Filter In .Autofilter.Filters 
22.
                If Filter.On Then 
23.
                    Wert_Filter1(i) = Filter.Criteria1 
24.
                    If Filter.Count > 1 Then 
25.
                        Wert_UndOder(i) = Filter.Operator 
26.
                        Wert_Filter2(i) = Filter.Criteria2 
27.
                    End If 
28.
                End If 
29.
                i = i + 1 
30.
            Next 
31.
          End If 
32.
           
33.
          .AutoFilterMode = False 
34.
    Else 
35.
        FilterOff = True 
36.
    End If 
37.
End With 
38.
'################################################################### 
39.
'####################### Autofilter einlesen ####################### 
40.
'################################################################### 
41.
 
42.
'################################################################### 
43.
'################### Autofilter wiederherstellen ################### 
44.
'################################################################### 
45.
Worksheets("Fahrzeugübersicht").Select 
46.
Rows("1:1").Select 
47.
Selection.Autofilter 
48.
 
49.
With Worksheets("Fahrzeugübersicht") 
50.
    If FilterOff = False Then 
51.
        For i = 1 To Filteranzahl 
52.
            If IsEmpty(Wert_Filter1(i)) Then 
53.
                ZeileAutoFilter.Autofilter Field:=i 
54.
            Else 
55.
                If Wert_Filter2(i) = "" Then 
56.
                    ZeileAutoFilter.Autofilter Field:=i, Criteria1:=Wert_Filter1(i) 
57.
                Else 
58.
                    ZeileAutoFilter.Autofilter Field:=i, Operator:=Wert_UndOder(i), _ 
59.
                    Criteria1:=Wert_Filter1(i), Criteria2:=Wert_Filter2(i) 
60.
                End If 
61.
            End If 
62.
        Next i 
63.
    End If 
64.
End With 
65.
'################################################################### 
66.
'################### Autofilter wiederherstellen ################### 
67.
'################################################################### 
68.
End Sub
vielleicht fällt jemandem das Problem auf
Vielne Dank schonmal
Bitte warten ..
Mitglied: Eintagsfliege
LÖSUNG 11.11.2014, aktualisiert 04.12.2014
Hallo chef1568!

So sollte es klappen:
01.
Option Explicit 
02.
 
03.
Private Type FilterData 
04.
    On As Boolean 
05.
    Count As Long 
06.
    Criteria1 As Variant 
07.
    Criteria2 As Variant 
08.
    Operator As Long 
09.
End Type 
10.
 
11.
Public Sub Autofilter() 
12.
    Dim arrFilters() As FilterData, rngFilters As Range, bolFilters As Boolean, i As Integer 
13.
     
14.
    '#######Einlesen 
15.
     
16.
    With Worksheets("Fahrzeugübersicht") 
17.
        If .AutoFilterMode Then 
18.
            With .Autofilter 
19.
                ReDim arrFilters(1 To .Filters.Count) 
20.
                 
21.
                For i = 1 To .Filters.Count 
22.
                    With .Filters(i) 
23.
                        If .On Then 
24.
                            arrFilters(i).On = .On 
25.
                            arrFilters(i).Count = .Count 
26.
                            arrFilters(i).Operator = .Operator 
27.
                            arrFilters(i).Criteria1 = .Criteria1 
28.
                            If .Count = 2 Then 
29.
                                arrFilters(i).Criteria2 = .Criteria2 
30.
                            End If 
31.
                        End If 
32.
                    End With 
33.
                Next 
34.
            End With 
35.
            bolFilters = True 
36.
           .AutoFilterMode = False 
37.
        End If 
38.
    End With 
39.
     
40.
    '#######Wiederherstellen 
41.
     
42.
    If bolFilters Then 
43.
        Set rngFilters = Worksheets("Fahrzeugübersicht").Rows(1) 
44.
         
45.
        rngFilters.Autofilter   'Auch setzen, wenn alle On=False?  
46.
        
47.
        For i = 1 To UBound(arrFilters) 
48.
            With arrFilters(i) 
49.
                If .On Then 
50.
                    If .Count = 1 Then 
51.
                        rngFilters.Autofilter i, .Criteria1 
52.
                    Else 
53.
                        rngFilters.Autofilter i, .Criteria1, .Operator, .Criteria2 
54.
                    End If 
55.
                End If 
56.
            End With 
57.
        Next 
58.
    End If 
59.
End Sub
Grüße Dieter
Bitte warten ..
Mitglied: chef1568
03.12.2014 um 23:10 Uhr
Hallo Dieter,

du hast noch einen kleinen Fehler in dem Code.
In Zeile 51 rufst du noch den .Operator auf obwohl kein weiteres Kriterium vorhanden ist.
Ansonsten funktioniert der Code

danke
Bitte warten ..
Mitglied: Eintagsfliege
04.12.2014, aktualisiert um 09:42 Uhr
Hallo chef1568!

In Zeile 51 rufst du noch den .Operator auf obwohl kein weiteres Kriterium vorhanden ist.
OK, hab ich wohl übersehen und oben rausgenommen

Grüße Dieter
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...