Anzeige

 2 Tabellen bein´m filtern einbeziehen


#21
Sorry, mir ist da was untergegangen. Wenn man den CurrentRegion ohne SET auslist, kommt ein Array und kein Objekt.
Da dein Restlicher Code auf dem Array aufbaut, sollte man da auch nix ändern

Ergo ändern wir nur den Debug.Print, so dass er auf das Objekt zugreift
Code:
debug.print .Range("A1").CurrentRegion.Address
 

josef24

Erfahrenes Mitglied
#22
Er motzt nach der Eingabe im Direktfenster immer, kein gültiger Name. Muss ich bei "Inhalte" vielleicht einen Wert ändern.

P.S. Danke und ich bleib noch etwas dran. Josef
 

josef24

Erfahrenes Mitglied
#24
Also heute mit frischem Mut: das Ergebnis lautet:
debug.print .Range("A1").CurrentRegion.Address$A$1:$F$231
was wohl bedeutet, das angezeigte Zeilen/Spalten (Tabellenumfang) eingebunden sind.
Hatte es vor ca. 20 Min gestartet, er arbeitet immer noch.
Liegt es vielleicht an EXCEL 2007 oder meinem Arbeitsspeicher, was braucht man idealer Weise für so was durch zu führen?
Danke und Gruß Josef
 
#25
$A$1:$F$231
Der Range passt. 231 Zeilen sind nicht zu viel.
Schneller wäre natürlich mit ADODB und SQL darauf zuzugreifen. Das geht sehr schnell. Aber ist halt etwas komplexer in der Anwendung.

Stell doch mal eine TestDB ins Forum. Dann können wir mal draufschauen.
 

Biber3

Erfahrenes Mitglied
#29
Moin josef24,

wie Yaslaw schon andeutete - deine Exceltabelle enthält sehr, sehr viel unnötigen Ballast.
Die Zeilen der Quelltabelle enthalten unendlich viele (identische) bedingte Formatierungen, die
a) wahrscheinlich auch durch Copy & Paste von Zeilen entstanden sind
b) zum Teil wirkungslos sind, weil die ganze Formelbedingung in Hochkommata steht
c) zu allem Überfluss auch noch volatile Funktionen wie JETZT() und DATUM() angegeben sind

-> deshalb werden werden zum Anzeigen von ein paar doofen Dutzend Zeilen grob geschätzt 58000 Formeln neu berechnet, nur um irgendein Feld mit grünem Hintergrund anzuzeigen, falls da "SZ" drinsteht.

Wie dem auch sei: wenn du eine passende Zeile in der Quelltabelle um Kopieren findest, dann kopierst du, weil es sich wohl schneller tippen liess, die komplette Zeile ("Rows(i).Copy" ) auf eine andere Row als Destination.
Und beim Kopieren wird nun auch wieder ALLES kopiert... die maximal 6 Werte, die tatsächlich drinstehen, und die Formate und die Rahmen und die Spaltenbreite und und und... und eben auch auch die 587 bedingten Formatierungen, die an der Quellzeile dranhängen.

Abhilfe in mehreren Schritten:
FALLS du die Daten wirklich nur in DIESER Exceltabelle hast, dann musst du diese Excel reparieren.
(Wenn du die Daten noch irgendwo anders hast, erstelle eine neue Tabelle von Anfang an, geht schneller!)

Reparatur: entweder die Quelltabelle im gewünschten Ausmass markieren, Strg+C und (in einer neuen Datei) in ein neues Excelsheet "Inhalte einfügen" -> "Nur Werte"

In der neu erzeugten Kopie einmalig die Bedingte Formatierung RICHTIG eingeben, also so, dass keine bedingte Formatierung je Zelle doppelt, 12fach, 587fach ist.

Wenn das getan ist, dann kannst du diese Quelltabelle komplett markieren, Strg+C und in das vorgesehene Ziel-Blatt für deine spätere Kopiererei pasten (in deinem Beispiel in die "Tabelle2"). Hier "Inhalte einfügen" ->"Formate".

Wenn du dann eine saubere Excel-Datei mit allen relevanten Daten hast, dann schließe die alte Datei (die jetzt in Data 2.zip ist) und jag die durch den Schredder, schenk sie der Schwiegermutti oder leg sie in die Schrottpresse.
Also die Datei, mein ich.

Danach kannst du wieder mit dem Makro weitermachen und dort:

a) erstmal dir eine Bedingung überlegen, mit der du wirklich nur die relevanten Zeilen findest.
Momentan erfüllen ALLE Zeilen deiner Quelltabelle die Bedingung inklusive der Überschriftszeile. Das soll bestimmt nicht sein.

b) Und dann kopie nicht komplette Rows mit allem Gedöns, sondern Ranges.
Ein Range-Object hat u.a. den Charme, dass du alles kopieren kannst, aber - ähnlich wie oben beim "Inhalte einfügen" bestimmen kannst, was gepasted werden soll.

Dann bau doch den Code ein bissel um für ein Range-Object

Code:
...
<deklarieren>
Dim wks2 As Worksheet
Set wks2 = Worksheets("Tabelle2")  ' Ziel-Worksheet
...
<vorbereiten>
With Workksheet(Tabelle1")
   For i = LBound().....
       if <vernünftige Bedingung> then
         .Rows(i).Copy ' wenn es denn partout die gesamte Zeile sein soll
            wks2.Cells(a, 1).PasteSpecial Paste:=xlPasteValues ' nur die Werte kopieren, Bedingte Formatierung ist schon da!
            a = a + 1
        End If
   next i
end with
...
<aufräumen>
Is' sich jetzt ungetestete Skizze, da ich nun auch kein Coder bin.
Bei den Feinheiten kann dir Yaslaw besser helfen.

Grüße
Biber
 

josef24

Erfahrenes Mitglied
#30
Danke für die umfangreiche Recherchen bei meinem Problem.
Habe alles radikal entfernt, und siehe da, wir arbeiten in angemessenem Zeitrahmen.
Das doppeln gewisser Formatierungen durch Kopiervorgänge war mir so nicht bekannt.
Nochmal Danke für eure Mühe und noch eine schöne Zeit. Gruß Josef
 
Anzeige
Anzeige