Discussion:
VBA-Code mit Formatierung "Tabelle" inkompatibel
(zu alt für eine Antwort)
Frank Vellner
2009-05-12 10:46:20 UTC
Permalink
Liebe NG,

ein VBA Code von Stefan Onken selektiert mir wunderbar die aktuell
selektieren Werte im Autofilter einer anderen Spalte. Das funktioniert
mit normalen Bereichen prima - unabhängig davon, ob ein Autofilter
gesetzt ist, oder nicht.

Ist die Spalte mit dem betroffenen Autofilter jedoch (Excel 2007) "Als
Tabelle formatiert" kommt der Laufzeitfehler 1004: "Die
AutoFilter-Methode des Range-Objektes konnte nicht ausgeführt werden.

Hat jemand eine Idee, wie ich den Code anpassen muss?

Zusatzproblem: Der Autofilter ist derzeit nach Durchlauf des Makros
exakt korrekt eingestellt. Ist nur ein Wert sowie "leere" markiert,
wird auch das richtige angezeigt. Ist jedoch mehr als ein Wert
markiert, werden plötzlich die leeren Zellen nicht mehr angezeigt
(obwohl "leere" nach wie vor korrekt markiert ist. In anderen
(ebenfalls nicht als Tabelle formatieren) Tabellen funktioniert es
dagegen korrekt (Leere werden unabhängig von der Anzahl der markieren
Elemente immer angezeigt).

Hier der Code Sub AutoFilterSetzen() von Stefan Onken, von dem ich oben
spreche:

Dim f()
ReDim f(Selection.Cells.Count)
For i = 1 To Selection.Cells.Count
f(i - 1) = Selection.Cells(i).text
Next
f(i - 1) = "="
ActiveSheet.Range("b:b").AutoFilter _
Field:=1, Criteria1:=f(), Operator:=xlFilterValues
End Sub

Viele Grüße
Frank
stefan onken
2009-05-12 11:36:09 UTC
Permalink
Post by Frank Vellner
Liebe NG,
Ist die Spalte mit dem betroffenen Autofilter jedoch (Excel 2007) "Als
Tabelle formatiert" kommt der Laufzeitfehler 1004: "Die
AutoFilter-Methode des Range-Objektes konnte nicht ausgeführt werden.
Hat jemand eine Idee, wie ich den Code anpassen muss?
die Makroaufzeichnung liefert hierfür:

ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter

Der Code müsste dann so aussehen:

Dim f()
ReDim f(Selection.Cells.Count)
For i = 1 To Selection.Cells.Count
f(i - 1) = Selection.Cells(i).Text
Next
f(i - 1) = "="
ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter _
Field:=2, Criteria1:=f(), Operator:=xlFilterValues


Der Name bei ListObjects muss ggfls angepasst werden.
Post by Frank Vellner
Zusatzproblem: Der Autofilter ist derzeit nach Durchlauf des Makros
exakt korrekt eingestellt. Ist nur ein Wert sowie "leere" markiert,
wird auch das richtige angezeigt. Ist jedoch mehr als ein Wert
markiert, werden plötzlich die leeren Zellen nicht mehr angezeigt
(obwohl "leere" nach wie vor korrekt markiert ist. In anderen
(ebenfalls nicht als Tabelle formatieren) Tabellen funktioniert es
dagegen korrekt (Leere werden unabhängig von der Anzahl der markieren
Elemente immer angezeigt).
hmm, kann ich so nicht nachvollziehen. Ist es nur 1 Tabelle, wo das
nicht richtig funktioniert? Wenn ja, ist an der Tabelle etwas anders
als bei den anderen?
Kannst du evtl die Tabelle irgendwie (online) verfügbar machen?

Gruß
stefan
Frank Vellner
2009-05-12 20:12:40 UTC
Permalink
Hallo Stefan,
Post by stefan onken
ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter
ja, das hatte ich auch bekommen.
Post by stefan onken
Dim f()
ReDim f(Selection.Cells.Count)
For i = 1 To Selection.Cells.Count
f(i - 1) = Selection.Cells(i).Text
Next
f(i - 1) = "="
ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter _
ach so, ich dachte man müsse
ActiveSheet.ListObjects("Tabelle1").Range("c:c").AutoFilter
schreiben. Aber stimmt, wie du es geschrieben hast, funktioniert es.

Vielen Dank!
Post by stefan onken
hmm, kann ich so nicht nachvollziehen. Ist es nur 1 Tabelle, wo das
nicht richtig funktioniert? Wenn ja, ist an der Tabelle etwas anders
als bei den anderen?
stimmt, dumm, dumm, der Klassiker: Da war nicht nichts in den Zellen
sondern ein Leerzeichen - damit die automatische Bereichserkennung
keinen Fehler macht...

Noch ein letzer Punkt zum Autofilter: Praktisch wäre es, ihn
anschliessend per Makro wieder auf alle Elemente anzeigen umzustellen.
Mit dem Code, den ich dazu fand, geht es bei Tabellen nicht:

With ActiveSheet
If .FilterMode = True Then
.ShowAllData
End If
End With

Mit diesem geht es zwar:
ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=1
aber eben nur, wenn das erste Feld gefiltert ist.

Wie könnte man in allen Feldern einer Tabelle alle Autofilter auf
"alles auswählen" stellen?

Viele Grüße
Frank
Alexander Wolff
2009-05-13 11:33:27 UTC
Permalink
Post by Frank Vellner
Wie könnte man in allen Feldern einer Tabelle alle Autofilter auf
"alles auswählen" stellen?
(Daten Filter Auto-) Filter aus -
(...-) Filter an

aufzeichnen und ggflls anpassen
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Frank Vellner
2009-05-13 15:44:55 UTC
Permalink
Hallo Alexander,
Post by Alexander Wolff
(Daten Filter Auto-) Filter aus -
(...-) Filter an
aufzeichnen und ggflls anpassen
ja, das tat ich bereits. Daher kommt
ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=1
aus dem Posting.

Aber es geht wie gesagt nur für das erste Feld.

Viele Grüße
Frank
stefan onken
2009-05-14 09:05:24 UTC
Permalink
Post by Frank Vellner
Aber es geht wie gesagt nur für das erste Feld.
hallo Frank,
Problem inzwischen gelöst?
Ich bekomme auch den Laufzeitfehler bei ShowAllData und dem als
Tabelle formatierten Bereich.

Mit diesem Code klappt das aber:

With ActiveSheet.ListObjects(1).Range
For i = 1 To .Columns.Count
.AutoFilter Field:=i
Next
End With

Gruß
stefan
Frank Vellner
2009-05-14 11:18:50 UTC
Permalink
Hallo Stefan,
Post by stefan onken
Problem inzwischen gelöst?
nein, das kann ich leider noch nicht - mehr auf die lange Bank der
Probleme geschoben, die gerade nicht so wichtig sind ;-)
Post by stefan onken
Ich bekomme auch den Laufzeitfehler bei ShowAllData und dem als
Tabelle formatierten Bereich.
With ActiveSheet.ListObjects(1).Range
For i = 1 To .Columns.Count
.AutoFilter Field:=i
Next
End With
wunderbar - Vielen Dank!

Viele Grüße
Frank
Christoph Sternberg
2009-05-13 12:27:12 UTC
Permalink
Post by Frank Vellner
Wie könnte man in allen Feldern einer Tabelle alle Autofilter auf
"alles auswählen" stellen?
Alldieweil es dafür in Excel 2007 einen Button gibt, habe ich den mal
aufgezeichnet und siehe da, das funktioniert auch zumindest in Excel
2003:

ActiveSheet.ShowAllData

Christoph Sternberg */\
Frank Vellner
2009-05-13 15:51:46 UTC
Permalink
Hallo Christoph,
Post by Christoph Sternberg
Alldieweil es dafür in Excel 2007 einen Button gibt, habe ich den mal
aufgezeichnet und siehe da, das funktioniert auch zumindest in Excel
ActiveSheet.ShowAllData
ja, genau diesen Befehl hatte ich ja auch gefunden. Daher kommt
With ActiveSheet
If .FilterMode = True Then
.ShowAllData
End If
End With

aus meinem Posting.
Nur funktioniert die Sacheleider in XL 2007 nicht. Im bekomme immer
Laufzeitfehler 1004 Anwendugns- oder objektdefinierter Fehler.

Viele Grüße
Frank
Christoph Sternberg
2009-05-13 16:09:52 UTC
Permalink
Post by Frank Vellner
With ActiveSheet
If .FilterMode = True Then
.ShowAllData
End If
End With
aus meinem Posting.
Nur funktioniert die Sacheleider in XL 2007 nicht. Im bekomme immer
Laufzeitfehler 1004 Anwendugns- oder objektdefinierter Fehler.
Huch, mit 2007 hatte ich es doch getestet und erst nachher probiert, ob
es auch mit 2003 klappt!?

Exakt Dein Code bringt bei mir keinen Fehler.

Christoph Sternberg */\
Christoph Sternberg
2009-05-14 12:47:10 UTC
Permalink
Post by Frank Vellner
Nur funktioniert die Sacheleider in XL 2007 nicht. Im bekomme immer
Laufzeitfehler 1004 Anwendugns- oder objektdefinierter Fehler.
Ich hab' mal wieder nicht richtig gelesen und hoffe, das mit diesem
Posting nochmal gut machen zu können ;-)

Den Fehler bekomme ich jetzt auch, aber nur unter bestimmten
Bedingungen: Der Fehler kommt genau dann, wenn auch im Ribbon der
entsprechende Löschbutton für den Filter inaktiv ist: das ist er immer
dann der Fall, wenn entweder kein Autofilter aktiv ist oder die aktive
Zelle nicht innerhalb der Tabelle ist.

Christoph Sternberg */\
stefan onken
2009-05-15 07:25:21 UTC
Permalink
Post by Christoph Sternberg
Den Fehler bekomme ich jetzt auch, aber nur unter bestimmten
Bedingungen: Der Fehler kommt genau dann, wenn auch im Ribbon der
entsprechende Löschbutton für den Filter inaktiv ist: das ist er immer
dann der Fall, wenn entweder kein Autofilter aktiv ist oder die aktive
Zelle nicht innerhalb der Tabelle ist.
Christoph Sternberg */\
hallo Christoph,
hast du den Tabellenbereich für den Filter auch als Tabelle
formatiert
(ribbon Start/Formatvorlagen/Als Tabelle formatieren)?

Gruß
stefan
Christoph Sternberg
2009-05-15 07:49:56 UTC
Permalink
Post by stefan onken
hallo Christoph,
hast du den Tabellenbereich für den Filter auch als Tabelle
formatiert
(ribbon Start/Formatvorlagen/Als Tabelle formatieren)?
Ja.

Christoph Sternberg */\
Christoph Sternberg
2009-05-15 15:24:07 UTC
Permalink
Post by stefan onken
hast du den Tabellenbereich für den Filter auch als Tabelle
formatiert
(ribbon Start/Formatvorlagen/Als Tabelle formatieren)?
Uiuiui, ich muß schon wieder zurückrudern: Mit der Bedingung wie bei
Frank (.. If .FilterMode = True ..) kriege ich den Fehler 1004 überhaupt
nicht mehr reproduziert. Lediglich der Filter wird nicht aufgehoben (es
passiert also nix), wenn die aktive Zelle nicht im Tabellenbereich ist.

Ohne die Bedingung kommt der Laufzeitfehler 1004, wenn kein Filter aktiv
oder die aktive Zelle nicht im Tabellenbereich ist.

Christoph Sternberg */\

Alexander Wolff
2009-05-12 11:35:47 UTC
Permalink
Post by Frank Vellner
ein VBA Code von Stefan Onken selektiert mir wunderbar die aktuell
selektieren Werte im Autofilter einer anderen Spalte. Das funktioniert
mit normalen Bereichen prima - unabhängig davon, ob ein Autofilter
gesetzt ist, oder nicht.
Ist die Spalte mit dem betroffenen Autofilter jedoch (Excel 2007) "Als
Tabelle formatiert" kommt der Laufzeitfehler 1004: "Die
AutoFilter-Methode des Range-Objektes konnte nicht ausgeführt werden.
Das ist ein gutes Beispiel für:

"Man sollte Daten nicht formatieren, sondern erst deren Ausgabe
(Verwendung)." Wenn Du Dich daran hältst, wirst Du kaum solche Probleme
bekommen.

Bin xl2007-los, daher ohne Tipp.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Loading...