WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   EXCEL-VBA: Blätter kopieren (http://www.wcm.at/forum/showthread.php?t=185040)

wbendl 09.02.2006 11:11

EXCEL-VBA: Blätter kopieren
 
Hi!

Folgende Vorgangsweise, um aus mehreren Excel-Mappen eine Übersicht in einer eigenen Mappe zu erstellen:

Der Code läuft in der Mappe, die die Übersicht enthalten soll.

- Öffnen der anderen Mappe
- Kopieren des gewünschten Blattes innerhalb der anderen Mappe
- In der Kopie alle Formeln durch Werte ersetzen
- Kopie in die Übersichtsmappe kopieren
- Andere Mappe ohne speichern schließen

Das Problem dabei:
Es funktioniert genau 22x problemlos. Beim 23. Mal läßt sich das Blatt nicht mehr in die Übersichtsmappe kopieren.

Ich vermute, daß es an mangelndem Speicherplatz liegt.
Ein Löschen der Zwischenablage hilft nicht.
Arbeisspeicher wäre genug frei.

Hat Excel eine interen Zwischenablage, oder einen begrenzten Speicher, den es vom Betriebsystem zugewiesen bekommt?

Hat jemand eine Idee, wie ich dieses Problem umgehen kann?


mfg

WB

Shadow 09.02.2006 11:15

Was ist, wenn du die Blätter direkt in die Übersichtsmappe kopierst und dort dann die Formeln durch Werte ersetzt. Dann sparst du einmal kopieren und löschen.

testi 09.02.2006 17:24

Gibt's irgendeine Fehlermeldung?
Funktionierts wenn Du es mit Einzelschritt (F8) machst?

wbendl 09.02.2006 19:05

Hi!

@Shadow
Das habe ich (natürlich) ursprünglich versucht. Leider gibt es in den Quelldateien einige (miserabel programmierte) Funktionen, die das nicht zulassen. Da müsste ich zuerst die Quellen überarbeiten.

Vielleicht wird mein Auftrag aber noch darauf ausgedehnt. Wenn es aber ein Speicherproblem ist, wir dadurch nur die Grenze verschoben. Aber auch 50 mögliche Kopiervorgänge wären eigentlich zu wenig.


@testi
Fehlermeldung:
Die Methode Copy des Worksheet-Objektes ist fehlgeschlagen.

Einzelschritt ist nicht möglich. Würde aber auch nichts bringen, weil ich ja genau weiß wo der Fehler auftritt. Ich weiß nur nicht warum, vermute aber einen Speicherüberlauf.

Na ja, vielleicht nimmt der Auftraggeber Vernunft an, und folgt meinem Ratschlag:
Den Mist wegwerfen, und als DB-Anwendung neu programmieren.


mfg

WB

testi 09.02.2006 22:53

Klingt vielleicht blöd,aber probiers mal wenn Du eine kleine Pause vor dem 22x kopieren einfügst.
Könnte sein, das Excel den Speicher (genau wie du den Speicherüberlauf vermutest) zu langsam wieder frei gibt.

wbendl 10.02.2006 10:32

Hi!

Eine Pause habe schon versucht, weil nach dem Kopieren innerhalb der Quelle die Zellen neu berechnet werden.

Wenn ich nur wenige mögliche Quellen verwende, und den Vorgang mehrfach ablaufen lasse, tritt der Fehler auch auf. Und zwar genau dann, wenn die Summe der Vorgänge 23 ist.

An einer Pause kann es also nicht liegen.


mfg

WB

Shadow 10.02.2006 16:48

Hmmm... habe gerade versucht ein einfaches Arbeitsblatt mit ein paar Formeln drauf 150x zu kopieren. Ging ohne Probleme.

Sind da vielleicht Diagramme auf den Blättern drauf. Weil ich hatte schon mal einen User der es geschaft hat die maximal mögliche Anzahl von Diagrammen in einer Excel-Mappe anzulegen. Als er noch ein weiteres Diagramm einfügen wollte kamen nur mehr komische Fehlermeldungen und es war nicht möglich. Er musste die Datei dann in 2 Mappen aufteilen.

wbendl 10.02.2006 17:14

Hi!

@Shadow
Das könnte die Idee sein. Ich muß mich erst über die maximale Anzahl von Diagrammen schlau machen, aber das ist eine Ansatz.

Normalerweise programmiere ich DB-Anwendungen mit VB. Excel ist nicht so mein Ding, aber ich forsche einmal nach.

Das Ergebnis werde ich natürlich posten.


mfg

WB

testi 10.02.2006 20:46

Könnte das Dein Problem vielleicht lösen?
http://support.microsoft.com/?scid=k...pid=1742&sid=7

wbendl 11.02.2006 12:02

Hi!

Der Link bezieht sich zwar auf die Mac-Versionen, hat mir aber trotzdem erstmal weitergeholfen. Diagramme können auch zu einem Überlauf bei den Schriftarten führen.

Inzwischen habe ich den Auftraggeber davon überzeugt, daß mit Excel nur eine Übergangslösung mit Einschränkungen möglich ist.

Damit dürfte das Thema erstmal erledigt sein.

Nochmal Danke für die Hilfe!


mfg

WB

Shadow 13.02.2006 16:18

Genau jetzt wo du es schreibst.... fällts mit wieder ein:
Die Fehlermeldung hatte etwas mit Schriftarten zu tun. Man würde also auf den erst Blick nicht darauf kommen, dass es zuviele Diagramme sind.

wbendl 13.02.2006 18:54

Hi!

Mein aktueller Stand:

Es ist die Anzahl der Schriften. Diese erhöht sich durch das Kopieren der Blätter, die Diagramme enthalten.

Der Lösungsvorschlag von MS: Die Option "Automatisch skalieren" (Standardeinstellung) bei den Diagrammbeschriftungen deaktivieren. Dann sollte die Zahl der Schriften nicht so hoch werden.

Ich muß also die Diagramme in den Quelldateien bearbeiten. Wenn es erledigt ist, werde ich über den Erfolg berichten.


mfg

WB

wbendl 15.02.2006 12:34

Hi!

Der Lösungsvorschlag von MS: Die Option "Automatisch skalieren" (Standardeinstellung) bei den Diagrammbeschriftungen deaktivieren.

Das hat keine Verbesserung gebracht. Es dürfte einfach die Zahl der Formatierungen insgesamt zu hoch sein. Die Beschränkung auf 22 dieser speziellen Blätter bleibt also aufrecht.

Nebenbei habe ich jetzt noch bemerkt, daß das Kopieren der Blätter nur funktioniert, wenn der User Admin-Rechte hat. Das soll aber nicht mein Problem sein.


mfg

WB

wbendl 11.04.2006 14:43

Hi!

Für alle, die vielleicht einmal ein derartiges Problem haben:

Das Problem sind nicht die Anzahl von Blättern, Diagrammen, Formatierungen, usw., sondern die vielen temporären Dateien, die dabei von Excel angelegt werden.

Die Lösung:

Eine eigene Instanz von Excel (unsichtbar) starten, in der die Kopiervorgänge ablaufen. Nach 10 Durchläufen beenden, und neu starten. Damit werden die temporären Dateiein immer wieder gelöscht.

Die sichtbare Instanz von Excel enhält den Code und den Startbutton. Der User wird durch eine Meldung über den Abschluß des Vorganges informiert.


mfg

WB

librepensador 02.05.2006 00:05

Hallo wbendl,

habe ein ähnliches Problem:

Ich möchte direkt eine bestimmte (variable) Anzahl von Tabellenblättern von einem workbook in ein neues workbook transferieren.

Ich habe das ganze zunächst mit der move-Methode probiert, hat aber höchstens 10 Blätter lang funktioniert.

Deshalb hab ich dann mal den copy-Befehl in Verbindung mit delete hergenommen.
Weiß nicht warum ein Unterschied ist, funktioniert hier aber 33 mal.

Ich wollte jetzt deine Lösung ausprobieren, krieg es aber so irgendwie nicht hin.
Hab dazu drei verschiedene Sub-Anwendungen entworfen die sich je nachdem wieder neu starten. Aber ich denke, du hast das irgendwie anders gemeint.

Wärst du so freundlich und könntest hier mal deinen code posten? Würdest mir echt weiterhelfen.

Ich verzweifle langsam an der ganzen Sache...

Danke,
librepensador

wbendl 02.05.2006 15:44

Hi!

Den Code darf ich nicht veröffentlichen, aber der prinzipielle Ablauf ist so:

Eine Instanz von Excel erstellen
Quell- u. Zieldatei in dieser Instanz öffnen
10 Kopiervorgänge durchführen
Quell- u. Zieldatei speichern und schließen
Instanz von Excel beenden

Das wiederholt sich in einer Schleife, bis alle Kopiervorgänge abgearbeitet sind.


mfg

WB

librepensador 02.05.2006 22:53

Hallo,

also zunächst mal danke für deine schnelle Antwort.

So einen Aufwand habe ich schon fast befürchtet.
Das Problem ist, dass meine Anwendung für andere user gedacht ist.
Da weiß ich dann nicht, wie die meine Dateien handlen. Es wäre sonst ein nettes zusätzliches gimmick gewesen.

Naja, zumindestens kann ich jetzt wenigstens sagen, dass der Grund für's Scheitern nicht an meinen fehlenden VBA-Kenntnissen liegt. Auch was wert...

cu,
librepensador


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag