So funktioniert JustAnswer:
  • Fragen Sie einen Experten
    Tausende Experten in über 200 Kategorien.
  • Erhalten Sie eine professionelle Antwort
    Per E-Mail oder sofortiger Benachrichtigung, während Sie auf unserer Website warten. Stellen Sie ggf. weitere Anschlussfragen.
  • 100%ige Zufriedenheit garantiert
    Bewerten Sie die erhaltene Antwort.
Stellen Sie Ihre Frage an Harald Wuest.
Harald Wuest
Harald Wuest, Dr.
Kategorie: Computer
Zufriedene Kunden: 172
Erfahrung:  Leiter Entwicklungsabteilung
109983523
Geben Sie Ihre Frage in der Kategorie Computer hier ein
Harald Wuest ist jetzt online.

Guten Tag, ich habe noch eine Frage bezüglich VBA. Und zwar

Kundenfrage

Guten Tag,ich habe noch eine Frage bezüglich VBA.
Und zwar hätte ich gerne ein Makro, beziehungsweise 2.Wie kann ich vorgehen, damit ich einen beliebig gesetzten Filter zwischenspeicher (quasi schon mit den Filtereinstellungen) und diesen zwischengespeicherten Filter später dann mit einem anderen Makro wieder in einer Sekunde ausgebe. Also einmal Sub Speichern und einmal Sub Ausgabe.Ich hoffe Sie können mir weiterhelfen.Beste Grüße
Gepostet: vor 1 Monat.
Kategorie: Computer
Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Ich denke das hier dürfte genau passen wenn Sie es in zwei Makros aufteilen:

https://www.herber.de/forum/archiv/624to628/627769_Autofiltereinstellungen_speichern.html

Kunde: hat geantwortet vor 1 Monat.
Also ich hab das jetzt so eingefügt für das Zwischenspeicher Makro, und bei dem Punkt bleibt es stehenWert_Filter1(i) = .Criteria1Ab da geht es nicht weiter
Kunde: hat geantwortet vor 1 Monat.
Also ich habe einen aktiven Filter, habe da wo der Filter ist die Selektion, und habe dann das Makro ausgeführt
Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Man muss noch den Bereich des Filters anpassen, das ist im Beitrag nicht ganz richtig enthalten und die Variablen Global machen, hier der Code für 2 Markos

für Filter ab Spalte 1:

Dim Wert_Filter1() As String, Wert_Filter2() As String
Dim Wert_UndOder(), Filteranzahl As Integer

Sub Merken()

Dim i As Integer, f As Object
With ActiveSheet
'Filtereinstellungen merken
Filteranzahl = .AutoFilter.Filters.Count

ReDim Preserve Wert_Filter1(Filteranzahl)
ReDim Preserve Wert_Filter2(Filteranzahl)
ReDim Preserve Wert_UndOder(Filteranzahl)

If .AutoFilterMode Then
i = 1

For Each f In .AutoFilter.Filters
With f
If .On Then
Wert_Filter1(i) = .Criteria1
Wert_UndOder(i) = .Operator

On Error Resume Next
Wert_Filter2(i) = .Criteria2
End If
End With

i = i + 1
Next

End If
'Ende Filtereinstellungen merken
End With

End Sub

Sub Setzen()

Dim i As Integer, f As Object, ZeileAutoFilter As Range

With ActiveSheet

'Filtereinstellungen wiederherstellen
For i = 1 To Filteranzahl

If Wert_Filter1(i) = "" Then
.Rows(1).AutoFilter Field:=i
Else
If Wert_Filter2(i) = "" Then
.Rows(1).AutoFilter Field:=i, Criteria1:=Wert_Filter1(i)
Else
.Rows(1).AutoFilter Field:=i, Operator:=Wert_UndOder(i), _
Criteria1:=Wert_Filter1(i), Criteria2:=Wert_Filter2(i)
End If
End If

Next i
'Ende Filtereinstellungen wiederherstellen
End With
End Sub

Kunde: hat geantwortet vor 1 Monat.
Viel Dank dafür, doch leider tut sich nichts. Ich hab nun 2 Makros, die Frage ist nun ob es beim zwischenspeichern scheitert oder beim wiederherstellen des Filters
Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Das bräuchte ich etwas genauer...

Ich habe folgendes Beispiel, bitte probieren Sie das erst einmal aus (siehe Bildanhang)

Nun aktiviere ich z.B. Filter Spalte X mit "ist gleich 2". Ergebnis ist dass nur noch Spalte 2 b übrig bleibt.

Nun das Makro "Merken" starten.

Dann nehme ich den Filter wieder weg (sonst sieht man natürlich keine Veränderung).

Nach Starten des Makros "Setzen" ist der "ist gleich 2" Filter wieder gesetzt...

Eine spezielle Selektion brauchen Sie nicht, die Funktion sucht sich selbst alle zusammenbhängenden Filter-Spalten auf der Seite.

Sie können einmal nach "Filteranzahl = .AutoFilter.Filters.Count"

einen MsgBox plazieren die die Zahl der Filter-Spalten ausgibt und prüfen ob das zu Ihrer Tabelle passt.

Also:

Filteranzahl = .AutoFilter.Filters.Count

MsgBox (Filteranzahl)

Im Beispiel erscheint 2 weil 2 Spalten gefiltert sind...

Bitte das Beispiel mal in einer neuen Excel-Datei probieren ob es da geht und dann versuchen das auf Ihre Tabelle zu übertragen.

Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Hier mal mein Beispiel als Excel.

Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Vielleicht habe ich Sie nicht ganz verstanden, wollen Sie das Speichern auch über das Schließen und wieder Öffenen der Excel-Tabelle haben?

Die Makros funktionieren nur solange die Datei geöffnet ist.

Ein Speichern der Daten über das Schließen der Datei hinaus ist eine längere Sache die umfangreich programmiert werden muss

(z.B. Daten der Filter in einem extra Tabellenblatt speichern)

Kunde: hat geantwortet vor 1 Monat.
Ne, so wie sie das kurz erklärt haben und mit dem Beispiel passt das. Genau so etwas brauche ich. Einfach den Filter zwischenspeichern und dann wieder anwenden. Bloß funktioniert das nicht so bei mir.Ich habe das Makro genau wie Sie oben in 2 Makros aufgeteilt.
Kunde: hat geantwortet vor 1 Monat.
Das von Ihnen geschriebene Makro bleibt hier auch stehen
Kunde: hat geantwortet vor 1 Monat.
Wenn ich eine Zeile filter passiert nichts, in diesem Fall waren 3 Zeilen gefiltert dann kam das debuggen
Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Ok, je nachdem wie man was filtert ändert sich leider der Datentyp der Criterien.

Ich habe es jetzt auf Variant umgeschrieben was besser funktioniert.

Nur bei Einzelauswahl über die Filter-Häkchenliste von mehr als 2 Werten (dann wird ein Array gebildet) funktioniert es nicht ganz.

Das brauchen Sie eventuell ja nicht.

Anbei die geänderte Fassung...

Kunde: hat geantwortet vor 1 Monat.
Da kommen beim Makro Setzen verschiedene Kästchen mit Zahlen?Und ja ich habe endlos lange Listen, was bedeutet dass ich öfters mehrere Zeilen filter
Experte:  Harald Wuest hat geantwortet vor 1 Monat.

Ich hatte gehofft, dass Sie die Makros als Anregung nehmen und sich ein wenig einlesen um zu verstehen was die Makros machen.

Nur so können Sie zukünftig selbst Änderungen vornehmen ohne immer wieder JustAnswer zu bemühen.

Zumal es nicht Sinn der Sache ist über JustAnswer SW-Programme schreiben zu lassen...

Zum Makor konkret,

Sie müssen natürlich die MsgBox Befehlszeilen die ich zum ausprobieren hinein gemacht habe rauslöschen.

Die Makros sind nur grobe Beispiele, für ausgereifte Makros ist einiges an weiterem Aufwand für Fehlerbehandlung, Typeprüfung, etc. sowie ausgiebiges Testen in verschiedenen Konstellationen nötig was den Rahmen hier deutlich sprengt.

Das Makro oben ist nicht für StringArrays als Criterien ausgelegt, hier müsste eine entsprechende Kopierfunktion ergänzt werden wenn der Variant-Type vom Type Array ist, das ist eine aufwändigere Sache die ich hier nicht in ein paar Minuten umsetzen kann.

Wenn die Setz-Funktion nur die Filter aus dem anderen Filter-Erstellungsmakro immer wieder setzen soll könnten Sie z.B. auch die Criterien String-Arrays im Filter-Erstellen-Makro in Wert_Filter1(i) speichern und dann die Filter daraus immer neu setzen.

Es gibt unzählige Möglichkeiten, je nachdem wofür es genau gebraucht wird, da müsste dann zuerst eine Spezifikation erstellt werden was wann wie zusammen funktionieren soll, also eine SW-Entwicklung...