Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1012to1016
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

Wechsel zwischen Mappen sehr verzögert

Wechsel zwischen Mappen sehr verzögert
25.09.2008 23:36:41
Alexander
Hallo zusammen!
Ich habe folgendes Problem und wollte fragen, ob jemand es kennt und vielleicht eine Lösung hat:
Ich habe ein VBA-Programm geschrieben, dass Excel-Dateien öffnet (mit Workbooks.Open) und zwischen den geöffneten Dateien Zell-Bereiche kopiert (mit Copy und PasteSpecial). Die Dateien haben eine Größe von ca. 13MB.
Der Wechsel zwischen den verschiedenen Dateien (die Open- und die PasteSpecial-Anweisung aktivieren die jeweils betroffene Datei) durch das VBA-Programm erfolgt nun leider sehr langsam. Ich vermute, dass das mit der Größe der Dateien zusamenhängt. Auch nach Beendigung des VBA-Programms kann ich zwischen den Dateien per Strg-Tab oder über das Fenster-Menu nur mit erheblicher Verzögerung wechseln.
Das Ganze zerschiesst die Performance des Programms, deswegen bin ich für Lösungswege sehr dankbar.
Viele Grüße
Alexander

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wechsel zwischen Mappen sehr verzögert
26.09.2008 01:14:44
Jürgen
Hallo Alexander,
wenn Du Inhalte zwischen zwei Dateien (oder auch innerhalb einer Datei) austauschen möchtest, ist es erheblich performanter, die Daten NICHT über die Zwischenablage zu transportieren, sondern per
ZukopierenderBereich.copy Zielzelle
z.B. also
ActiveWorkbook.Sheets(1).usedrange ThisWorkbook.Sheets(1).Range("a1")
direkt zu kopieren, wenn man Formeln erhalten und Formate mit übertragen möchte. Sollen zwar die Formate, aber statt Formeln nur die Werte übertragen werden, ergänzt man die vorgenannte Zeile um eine weitere, die die Formeln entfernt, z.B.
ThisWorkbook.Sheets(1).usedrange.value = ThisWorkbook.Sheets(1).usedrange.value
Sollen nur die Inhalte, ohne Formate kopiert werden, geht das über
Zielbereich.value = Quellbereich.value
Damit das funktioniert, müssen allerdings Quell- und Zielbereich gleich groß sein. Beispiel: aus der gerade geöffneten Datei (ActiveWorkbook) sollen die Werte des ersten Blattes auf das erste Blatt der das Makro enthaltenden Datei (ThisWorkbook) übertragen werden:
Thisworkbook.sheets(1).range(ActiveWorkbook.sheets(1).usedrange.address).value = ActiveWorkbook.sheets(1).usedrange.value
Ohne Deinen Code zu kennen noch der Hinweis, dass Du für das Übertragen nicht zwischen den Dateien wechseln mußt - auch nicht, wenn Du den Weg über die Zischenablage / PasteSpecial nimmst (abgesehen davon, dass durch das Öffnen der Quelldatei diese zur aktiven Datei wird - aber das kann sie ja auch bleiben, bis sie wieder geschlossen wird)
Gruß, Jürgen
Anzeige
AW: Wechsel zwischen Mappen sehr verzögert
26.09.2008 23:56:00
Alexander
Hallo Jürgen,
Danke für Deine schnelle Antwort. Ich habe mein Programm dahingehend überarbeitet, dass ich möglichst alle Activate- and Select-Anweisungen rausgeschmissen habe, um die Anzahl der Wechsel zwischen Arbeitsmappen zu reduzieren. Außerdem benutze ich auf Deinen Rat hin nur Copy für "Alles Kopieren" und Zielbereich.value = Quellbereich.value für "Werte einfügen". Das verringert ebenfalls die Anzahl der langsamen Mappen-Wechsel.
Mappenwechsel werden jetzt im Programm nur noch durch eine Activate-Anweisung, .Open, .Close, .Save, .SaveAs ausgelöst (Ich bin sicher, dass PasteSpecial auch aktiviert; ich glaube, das war ab einer bestimmten Excel-Version neu). Gerne hätte ich wegen der mir unerklärlichen Langsamkeit überhaupt keine Mappenwechsel, was bestimmt nicht möglich ist, da ich ganze Verzeichnisse von Dateien automatisch abarbeiten will und daher öffnen, schliessen, speichern muss.
Eine Sache habe ich noch ausprobiert: Ich habe eine "Zwischenablage löschen"-Routine ergooglet. Wenn ich diese nach Ende meines Kopierprogramms im VBA-Editor per Hand starte, kann ich danach per Strg-Tab wieder in der gewohnten Schnelle zwischen den geöffneten Mappen wechseln. Wenn ich die "Zwischenablage löschen"-Routine aber als letzten Schritt im Kopierprogramm aufrufe, hat sie keine Wirkung. Ich verstehe das nicht.
Insgesamt ist die Performance durch die Verringerung der Mappenwechsel viel besser geworden. Es ist trotzdem schade, dass die Mappenwechsel, die verbleiben, das Programm so verlangsamen.
Vielleicht hat jemand aus der Forums-Gemeinde noch eine Idee.
Viele Grüße
Alexander
Anzeige
AW: Wechsel zwischen Mappen sehr verzögert
29.09.2008 11:26:14
Jürgen
Hallo Alexander,
wenn Du konsequent den Code wie beschrieben umgestellt hast, sollte die Zwischenablage nicht mehr benötigt werden - ein Leeren per Trick ist somit überflüssig.
Auch Activate-Anweisungen werden bei konsequenter Adressierung der Datei- und Arbeitsblattobjekte nicht benötigt. Die anderen genannten Methoden führen nicht oder nur unter Umständen zu einem Wechsel der im Vordergrund liegenden Datei - und selbst das sollte keine allzugroße Zeitverzögerung mit sich bringen.
Möglicherweise kannst Du die Ausführungsgeschwindigkeit noch steigern, wenn Du vorübergehend Anzeigeaktualisierung ausschaltest (Application.ScreenUpdating = False) und den Berechnungsmodus auf "manuell" stellst (Application.calculation = xlCalculationManual).
Für weitere Anregungen wäre es gut, Deinen Code sehen zu können.
Gruß, Jürgen
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige