Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA-Code mit Formatierung "Tabelle" inkompatibel

439 views
Skip to first unread message

Frank Vellner

unread,
May 12, 2009, 6:46:20 AM5/12/09
to
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

unread,
May 12, 2009, 7:36:09 AM5/12/09
to
On 12 Mai, 12:46, "Frank Vellner" <weglassen_frankv...@yahoo.de>
wrote:
> 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.

> 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

Alexander Wolff

unread,
May 12, 2009, 7:35:47 AM5/12/09
to
> 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


Frank Vellner

unread,
May 12, 2009, 4:12:40 PM5/12/09
to
Hallo Stefan,

> die Makroaufzeichnung liefert hierf�r:
> ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter

ja, das hatte ich auch bekommen.

> 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 _

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!

> 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

unread,
May 13, 2009, 7:33:27 AM5/13/09
to
Die Tastatur von Frank Vellner wurde wie folgt gedr�ckt:

> 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

Christoph Sternberg

unread,
May 13, 2009, 8:27:12 AM5/13/09
to

Frank Vellner meinte:

>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

unread,
May 13, 2009, 11:51:46 AM5/13/09
to
Hallo Christoph,

> 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

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

Frank Vellner

unread,
May 13, 2009, 11:44:55 AM5/13/09
to
Hallo Alexander,

> (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

Christoph Sternberg

unread,
May 13, 2009, 12:09:52 PM5/13/09
to

Frank Vellner meinte:

>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 */\

stefan onken

unread,
May 14, 2009, 5:05:24 AM5/14/09
to
>
> 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

unread,
May 14, 2009, 7:18:50 AM5/14/09
to
Hallo Stefan,

> 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 ;-)

> 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

wunderbar - Vielen Dank!

Viele Gr��e
Frank

Christoph Sternberg

unread,
May 14, 2009, 8:47:10 AM5/14/09
to

Frank Vellner meinte:

>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

unread,
May 15, 2009, 3:25:21 AM5/15/09
to

> 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

unread,
May 15, 2009, 3:49:56 AM5/15/09
to

stefan onken meinte:

>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

unread,
May 15, 2009, 11:24:07 AM5/15/09
to

stefan onken meinte:

>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 */\

0 new messages