Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1844to1848
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

Filter (Spaltenname als Tabellenblatt)

Filter (Spaltenname als Tabellenblatt)
07.09.2021 17:57:14
Stefan
Hallo zusammen, ich bitte um euere Hilfe bei meinem VBA-Problem.
ich habe eine Mitgliederliste mit ca. 500 Zeilen und 30 Spalten unseres Vereins.
Die Datei hat ein Tabellenblatt “Mitglieder-Datei“. Die Spaltenüberschriften sind in der Zeile 2 des Tabellenblatts.
Mit dem Autofilter filtere ich jeweils eine Spalte der Mitglieder-Datei und kopiere die gefilterte Datei mit einem Makro in ein neues Tabellenblatt. Das Tabellenblatt erhält nun den Namen “Tabelle1“ bzw. “Tabelle2“, etc. Bis hierher funktioniert alles.
Damit andere Personen mit der Datei arbeiten können, sollte die neue Datei jedoch den Namen der Spaltenüberschrift des Autofilters nach der gefiltert wurde, erhalten. Das neue Tabellenblatt soll z.B. von WORD zum Etikettendruck oder Geburtstagsliste ect. verwendet werden.
Hoffentlich habe ich mich verständlich ausgedrückt!

Sub KopierenDerListe()
Sheets("Mitglieder-Datei").Unprotect
Range("a2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
Columns("J:J").EntireColumn.AutoFit
Columns("L:L").EntireColumn.AutoFit
Rows("2:2").Select
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True                     '1. Zeile einfrieren
Rows("3:" & Rows.Count).Select
With Selection.Interior
.PatternThemeColor = xlThemeColorAccent1
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A2").Select
' ActiveSheet.Name = "Name der gefilterten Spalte"
Sheets("Mitglieder-Datei").Select
Range("A3").Select
Selection.Autofilter
MsgBox "Achtung" & Chr(13) & "Die gefilterten Daten wurden in ein neues Tabellenblatt kopiert" & "und stehen im nächsten Tabellenblatt zur Verfügung", vbCritical + vbOKOnly
Sheets("Mitglieder-Datei").Protect
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filter (Spaltenname als Tabellenblatt)
07.09.2021 18:11:33
ralf_b
in der gezeigten Sub ist der Spaltenname nicht enthalten. Du kannst dies mit mittels Parmeterübergabe an die Sub oder per globale Variable lösen.
AW: Filter (Spaltenname als Tabellenblatt)
09.09.2021 20:04:19
Stefan
Hallo zusammen, mit der vorgeschlagenen Lösung kann ich leider nichts anfangen.
Möglicherweise habe ich mich falsch ausgedrückt, bzw. meine VBA-Kennnisse sind zu schwach.
Der Spaltenname ist natürlich in der Sub nicht enthalten. Diesen Spaltennamen suche ich ja.
Ich brauche eine Sub, die den gesetzten Filter der Spalte in Zeile 2 ausliest und danach das aktive Tabellenblatt benennt.
Nach dem Motto: ActiveSheet.Name = "Name der gefilterten Spalte".
Also: wie kann ich den gesetzten Filter auslesen und einer Variablen übergeben?
Anzeige
AW: Filter (Spaltenname als Tabellenblatt)
09.09.2021 20:56:01
ralf_b
Hallo,
ich ging davon aus das du den Filter auch per VBA setzt.
Hier mal eine Function, die hoffentlich das tut was du suchst.
ActiveSheet.Name = getautofilter( "Mitglieder-Datei")

Function getautofilter(sSh As String) As String
Dim sAf As String
sAf = "Kein Filter"
With ThisWorkbook.Worksheets(sSh)
If .AutoFilter.FilterMode Then
If .AutoFilter.Filters.Count > 0 Then
sAf = .AutoFilter.Filters(1).Criteria1
End If
End If
End With
getautofilter = af2
End Function

AW: Filter (Spaltenname als Tabellenblatt)
10.09.2021 20:40:13
Stefan
Danke für die schnelle Antwort und die Funktion
Leider bringt sie einen
Laufzeitfehler ‚1004‘:
Anwendungs- oder objektdefinierter Fehler
sAf = .Autofilter.Filters(1).Criterial
Möglicherweise hängt es damit zusammen, dass die Filter nicht in der 1. Zeile der Datei, sondern in der 2. Zeile stehen? Bin leider überfragt. Bitte um weitere Hilfe.
Anzeige
AW: Filter (Spaltenname als Tabellenblatt)
10.09.2021 20:58:35
Daniel
also wenn du den fetten Text genau so stehen hast, dann liegts am letzten Zeichen
Ralf schrieb: ...Criteria1 (Criteria-EINS)
du hast ... Criterial (Criteria-L)
Gruß Daniel
AW: Filter (Spaltenname als Tabellenblatt)
10.09.2021 21:09:41
ralf_b
Und getautofilter = af2 sollte getautofilter = sAf heißen. Ich hatte das zum Schluß noch schnell umgeschrieben. wohl nicht komplett.
AW: Filter (Spaltenname als Tabellenblatt)
13.09.2021 12:39:42
Stefan
Hallo Daniel, hallo Ralf,
habe jetzt das Makro angepasst wie von euch vorgeschlagen. Das mit dem Critica1 (eins) war mein Fehler. Das Makro bringt aber leider immer noch die Fehlemeldung Laufzeitfehler ‚1004‘: Anwendungs- oder objektdefinierter Fehler.

Function getautofilter(sSh As String) As String
Dim sAf As String
sAf = "Kein Filter"
With ThisWorkbook.Worksheets(sSh)
If .Autofilter.FilterMode Then
If .Autofilter.Filters.Count > 0 Then
   sAf = .Autofilter.Filters(1).Criteria1
End If
End If
End With
getautofilter = sAf
End Function

Anzeige
AW: Filter (Spaltenname als Tabellenblatt)
13.09.2021 13:25:51
Oberschlumpf
Hi Steffen,
lösch deine obige Function getautofilter und versuch es hiermit:

Function getautofilter(sSh As String) As String
Dim sAf As String
Dim lloCol As Long
On Error Resume Next
sAf = "Kein Filter"
With ThisWorkbook.Worksheets(sSh)
If .AutoFilter.FilterMode Then
If .AutoFilter.Filters.Count > 0 Then
For lloCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
sAf = .AutoFilter.Filters(lloCol).Criteria1
If sAf  "Kein Filter" Then Exit For
Next
End If
End If
End With
On Error GoTo 0
getautofilter = sAf
End Function
Erklärung:
Mit

sAf = .Autofilter.Filters(1).Criteria1
kommt es immer wieder zum Fehler, wenn du den Filter - nicht in Spalte 1 - sondern in jeder anderen Spalte auswählst, denn...

.Filters(1)
...prüft den Filter in Spalte 1!
Da du den Filter aber in einer anderen Spalte ausgewählt hattest, kommt es zu dem Fehler, da in Spalte 1 der Filter gar nicht gesetzt ist.
Da ja niemand weiß, welche Spalte wann ausgewählt wurde, muss man jede Spalte des Autofilters überprüfen.
Deswegen arbeitet mein Code mit For/Next - und mit On Error.
Mein Code "sagt": Wenn es zu einem Fehler kommt, mach mit der nächsten Zeile weiter.
So lange es in...

sAf = .AutoFilter.Filters(lloCol).Criteria1
...zum Fehler kommt, ändert sich der Inhalt von sAf ("Kein Filter") nicht.
Somit wird die If sAf ... Zeile übersprungen, und es geht mit NEXT weiter - so lange, bis DIE SPALTE gefunden wurde, in der der Anwender zuvor die AutoFilter-Auswahl getroffen hatte.
JETZT wird...

sAf = .AutoFilter.Filters(lloCol).Criteria1
....korrekt ausgeführt, sAf erhält die von dir gewünschte Spaltenüberschrift, und mit If sAf "Kein Filter" Then... wird sofort die For/Next-Schleife verlassen.
auch wichtig:
In der Zeile...

For lloCol = ... Cells(1, Columns.Count).End(xlToLeft).Column
...MUSST du die 1 mit der Zeilennummer austauschen, in der sich deine AutoFilter-Zeile befindet.
Hilfts?
Wenn nein, zeig uns eine Datei mit Code mit Daten, in der wir den richtigen Code einbauen können.
Ciao
Thorsten
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige