copy-funktion umgehen mit Activecell.value, Auswirkung?
27.12.2023 01:10:48
Frank Dreier
ich habe etwas "wildes" vor. Um die Berechnungszeit zu halbieren möchte ich 2 unabhängige Excel-Instanzen gleichzeitig via Makro ablaufen lassen um die Berechnungszeit zu halbieren (indem man einfach mehrere, vorhandene CPU-Kerne benutzt - das geht aber eben nur mit 2 gleichzeitig, unabhängig voneinander gestarteten und geöffneten Excels, dann kann man 2 Makros "parallel" ablaufen lassen).
Nun zum Problem: Wenn man 2 Excel-Instanzen öffnet und bei beiden Makros ablaufen lässt, funktioniert das zwar- allerdings nur bis zu dem Punkt wenn man die Copy-Funktion benutzt im Code. Wird in beiden gleichzeitig oder kurz hintereinander diese benutzt (z.B. um Werte zu kopieren etc.) dann brechen in der Regel beide Makros ab- ohne Fehlermeldung. Das liegt daran, dass der gecachte Inhalt nicht mehr der gleiche ist, da das "andere Excel" (Excel 2) auch die externe Kopierfunktion benutzt und Excel 1 (erste Instanz) dann irgendwie merkt: Hey, der Cache-Inhalt ist nicht mehr der gleiche wie ich ihn gerade eingelesen habe!
NUN ZUM PROBLEM: Lohnt es sich die .copy-Funktionen in Makros zu vermeiden und stattdessen mit z.B:
Sheets("Tabelle1").Select
Range("A1").Select
x = ActiveCell.Value
Sheets("Auswertung").Select
Range("B2").Select
ActiveCell.Value = x
zu arbeiten um eben das oben genannte Problem zu umgehen? Der Wert wird so auch von A1 nach B2 "kopiert" allerdings ohne die Kopierfunktion (und damit das oben beschriebene Problem) anzufassen. Man braucht also keinen "externen" Zwischenspeicher oder gibt es hier eine andere Lösung, z.B. dass man Excel einen externen Zwischenspeicher "1" zuweisen kann und in einem anderen Fall den "externen Zwischenspeicher "2"?
Ich meine mich daran erinnern zu können, dass das früher ging und Excel verschiedene Zwischenspeicher anlegen konnte.
Hat damit schon jemand Erfahrungen oder vieleicht sogar andere Lösungen gefunden, 2 Excel-Instanzen mit Makros parallel laufen zu lassen? Habe den Code schon optimiert etc., bei einer Instanz dauert es einfach sehr lange.
Vielen Dank für Eure Ideen im Voraus!