SpezialFilter --> Ausgabe in Tabelle (Strg+T)
#1
Hallo, ich habe eine weiterführende Frage zu meinem letzten Thread über SpezialFilter... ( http://www.clever-excel-forum.de/Thread-...matisieren ) ... ich habe nun ein funtionierdenden VBA Code...

PHP-Code:
Sub test()
'
test Makro

Sheets
("Auswertung").Range("A11").CurrentRegion.Clear
  Range
("Listenbereich").AdvancedFilter Action:= _
   xlFilterCopy
CriteriaRange:=Sheets("Auswertung").Range("A1").CurrentRegionCopyToRange _
  
:=Sheets("Auswertung").Range("A10"), Unique:=False
End Sub 

Diesem kann ich jetzt auf künftige Aufagen anpassen..., was für mich schon schwer genug war - danke an alle die mit Geduld "und Spucke" mitgeholfen haben diesen so zu "klöppeln"...

ich hätte gern als Ausgabe eine Tabelle (und zwar in "TableStyleMedium2") - ich habe versucht das mit dem MakroRekorder hinzu bekommen... ... aber no Way... keine Chance... ... vielleicht gibt's ja eine Möglichkeit..?

Danke fürs Interesse zumindest für's Lesen... Wink
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#2
Hallo Jörg,

hier mal mein Ansatz.
Ich habe, wie Du auch, erst mal den code aufgezeichnet (Makro1)

Im zweiten Makro habe ich erst mal den code übernommen und die nicht benötigten Zeilen entfernt. Ich dachte mir, dass ich ja nicht die Breite und Höhe (Code-Zeilen mit ...Width... und ...Height ..) ändern wollte. Dann habe ich im Excel-Blatt noch die Aktionen zum Tabelle einfügen rückgängig gemacht und den geänderten Code getestet, und es hat funktioniert.

Wenn Excel die Daten mit dem Spezialfilter einfügt, ist unklar, wo das endet Huh oder anders gesagt, wie viele Zeilen eingefügt werden. Also habe ich Excel die Zeilenzahl ermitteln lassen. Hierzu habe ich die im anderen Thread benutze "CurrentRegion" eingesetzt.
Der Unterschied zu Deiner Variante ist jetzt nur noch die Zelle A1, die ich benutzt habe - bei Dir wäre es A10 und dann wolltest Du ein anderes Format. Das kannst Du aus Deinem aufgezeichneten code übernehmen.

Hinweis: Wenn bei Dir auch in A9 was steht bzw. in den Zellen der Zeile 9 über Deiner Tabelle oder wenn unmittelbar in der Spalte neben dieser Tabelle ein über die Tabelle nach oben oder unten hinausragender gefüllter Bereich ist, passt die CurrentRegion nicht. Dann werden die "zusätzlichen" Zeilen mitgezählt.

Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B$3"), , xlYes).Name = _
        "Tabelle1"
    Range("Tabelle1[#All]").Select
    Application.Width = 987.75
    Application.Height = 655.5
    ActiveSheet.ListObjects("Tabelle1").TableStyle = "TableStyleMedium3"
End Sub

Sub test()
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B$" & Range("A1").CurrentRegion.Rows.Count), , xlYes).Name = _
        "Tabelle1"
    ActiveSheet.ListObjects("Tabelle1").TableStyle = "TableStyleMedium3"
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo André, ich sehe schon, das wird vielleicht ein Thema fürs XL-Treffen... da gibts möglicherweise Klärungsbedarf und wahrscheinlich ist es besser sowas zu besprechen... ... wenn ich Dich dann darauf nochmal ansprechen darf...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#4
Hallo Jörg,
Jederzeit. Aber hat es wenigstens funktioniert? Wie gesagt, Du brauchst nur die beiden Zeilen aus dem zweiten Makro und dort die beiden Dinge ändern.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo André, was ich nicht bedacht hatte, das sollte auch unter XL2003 laufen und da gibt's ja noch keine Tabellen sondern Listen - und die hatten ja keine Formatvorlagen... ... leider..;-(
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#6
Hallo André, ich habe jetzt getestet und es läuft ... naja nicht ganz... Ich habe eine neue Datei (die nur unter >=XL2007) laufen soll... ... dort habe ich ff. Code zusammengeschustert... Aber: erläuft nur beim ersten Mal. Danach meldet sich der Debugger (und ich kann mit dem Debugger nix anfangen, weil ich nicht wirklich weiß, wie das funzt...) und zeigt mit das in den ---> ... <--- gelb an... ... das bedeuted sicher, dass die Tabelle jetzt stört... Ich nehme an man muss vor dem erneuten starten die Tabelle in einen Bereich konvertieren, diesen dann löschen... aber genau das bekomme ich nicht gebacken...

PHP-Code:
Sub test()
'
test Makro
'Sheets("Auswertung").Range("C2").Select
'    
ActiveWindow.SmallScroll Down:=69  hier habe ich verucht die Tabelle in einen Bereich konvertieren zu lassen... 
'Sheets("Auswertung").Range("C2:G1000").Clear
Sheets("Auswertung").Range("$C$2:$G$" & Range("C2").CurrentRegion.Rows.Count).Clear
Sheets("Auswertung").Range("A2").Select
  Range("Auswahl").AdvancedFilter Action:= _
   xlFilterCopy, CriteriaRange:=Sheets("Auswertung").Range("A1:B2"), CopyToRange _
  :=Sheets("Auswertung").Range("C1:G1"), Unique:=False

---> ActiveSheet.ListObjects.Add(xlSrcRange, Range("$C$1:$G$" & Range("C2").CurrentRegion.Rows.Count), , xlYes).Name = _
        "Tabelle3"<---
    ActiveSheet.ListObjects("Tabelle3").TableStyle = "TableStyleMedium2"
End Sub 
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#7
Hallo Jörg,

es gibt da zwei Fehler. Den ersten bringt Dir Excel, weil, wie Du schon gemerkt hast, keine Tabelle auf eine schon vorhandene Tabelle gelegt werden darf. Als nächstes bringt Dir Excel einen Fehler wegen eines bereits vorhandenen Namens bringt.

Jetzt müsste man genau überlegen, was Excel tun soll.
Kann man vor dem erneuten Ausführen die vorhanden Tabelle löschen oder sollen Daten angefügt werden?

Du hast Das in Deinem code schon versucht.
Sheets("Auswertung").Range("$C$2:$G$" & Range("C2").CurrentRegion.Rows.Count).Clear
Das leert maximal die Zellen, lässt aber die Tabelle bestehen.
Bei mir unter 2013 geht das so:
Code:
Range("Tabelle3[#All]").ClearContents

Anschließend fehlen auch die Überschriften. Die kommen aber wohl mit den gefilterten Daten?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#8
(04.08.2014, 19:45)schauan schrieb: Hallo Jörg,

es gibt da zwei Fehler. Den ersten bringt Dir Excel, weil, wie Du schon gemerkt hast, keine Tabelle auf eine schon vorhandene Tabelle gelegt werden darf. Als nächstes bringt Dir Excel einen Fehler wegen eines bereits vorhandenen Namens bringt.

Jetzt müsste man genau überlegen, was Excel tun soll.
Kann man vor dem erneuten Ausführen die vorhanden Tabelle löschen oder sollen Daten angefügt werden?

Du hast Das in Deinem code schon versucht.
Sheets("Auswertung").Range("$C$2:$G$" & Range("C2").CurrentRegion.Rows.Count).Clear
Das leert maximal die Zellen, lässt aber die Tabelle bestehen.
Bei mir unter 2013 geht das so:
Code:
Range("Tabelle3[#All]").ClearContents

Anschließend fehlen auch die Überschriften. Die kommen aber wohl mit den gefilterten Daten?

Hallo André, die Überschriften sind die Überschriften der Ausgabe, die dürfen nicht wech das ist der Zielbereich...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#9
Hallo Jörg,

dann geht die "Tabelle in der Excel-Tabelle" nicht zu löschen und der code funktioniert nicht. Man könnte die Überschriften in der Tabelle aber hinterher neu setzen.

Code:
Range("C1")="Überschrift1"
Range("D1")="Überschrift2"

usw. Man könnte die natürlich auch vor dem Löschen in eine Variable einlesen und hinterher wieder ausgeben.

Code:
arrUeber = Range("c1:g1").Value
Range("Tabelle3[#All]").ClearContents
... die weiteren Aktionen
Range("c1:g1") = arrUeber
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Hallo André, erstmel vielen Dank für Deine Bemühungen. Ich weiß das wirklich zu schätzen... wahrscheinlich sollte ich Dir das mal mit dem TeamViewer zeigen oder einfach bis zum XL-Treffen warten... Ich behelfe mich zurzeit damit, dass wenn ich eine neue Anfrage starten will, dass ich in die Tabelle gehe, diese dann in einen Bereich konvertiere. Alles von C2 bis Gn lösche... und die neue Anfrage staret. Das funzt...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste