Excel speichern ohne vorher alles durchzurechnen

  • #1
K

klexy

Bekanntes Mitglied
Themenersteller
Dabei seit
04.05.2002
Beiträge
802
Reaktionspunkte
0
Ort
Bayern
Situation:
Datei A enthält Daten, die per Makro eingespielt werden.
Datei B enthält Formeln, die sich auf Datei A beziehen
Datei C enthält Formeln, die sich auf Datei B beziehen

Wenn ich Datei C öffne, wird nach der Aktualisierung der Verknüpfungen gefragt. Das bestätige ich und dann dauert es endlos.
Wenn aber Datei B schon geöffnet ist, läuft die Aktualisierung viel schneller.
Ein Makro macht folgendes: Öffnet erst Datei A, dann Datei B, dann Datei C. Nach dem Befehl Calculate speichert und schließt es erst C, dann B, dann A.
Alle 3 Dateien werden am ursprünglichen Ort und in einem anderen Ordner gespeichert.
Code:
Workbooks.OpenText FileName:=C:\Original\Datei A.xls
    Workbooks.OpenText FileName:=C:\Original\Datei B.xls
        Workbooks.OpenText FileName:=C:\Original\Datei C.xls
Calculate
        ActiveWorkbook.Save
        ActiveWorkbook.SaveAs C:\Kopie\Datei C.xls
        ActiveWindow.Close
    ActiveWorkbook.Save
    ActiveWorkbook.SaveAs C:\Kopie\Datei B.xls
    ActiveWindow.Close
ActiveWorkbook.Save
ActiveWorkbook.SaveAs C:\Kopie\Datei A.xls
ActiveWindow.Close

Problem:
C ist gleich zu.
Wenn B gespeichert wird, fängt er wieder erst mit dem Berechnen an und speichert erst dann.
Gibt es einen Befehl, der sagt: Speichern und schließen ohne neues Berechnen? Denn berechnet wurde ja schon mit Calculate
Irgendwas analog zu ActiveWindow.Close SaveChanges:=0
 
  • #2
Hallo klexy,

wahrscheinlich hilft dir das weiter:

Application.Calculation = xlManual
Application.Calculation = xlAutomatic


Ciao


Fibo
 
  • #3
Nö, leider nicht

Hab ich schon drin im Makro. Das hilft, daß er nicht alles durchrechnet, wenn er die Datei aufruft. Beim Abspeichern hilft es aber nicht.
 
  • #4
Hallo klexy,

schon mal so versucht ?

Gruß Matjes :)
Code:
Option Explicit
Sub DreiAbhaengigeDateienSpeichern()

 Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook
 
->als Textfile einlesen
->:-( schon komisch das die Textdatei die Endung xls hat ???
->normalerweise würde ich bei xls Workbooks.Open FileName:=... erwarten
 Workbooks.OpenText FileName:=C:\Original\Datei A.xls
 Set wb1 = ActiveWorkbook
 Workbooks.OpenText FileName:=C:\Original\Datei B.xls
 Set wb2 = ActiveWorkbook
 Workbooks.OpenText FileName:=C:\Original\Datei C.xls
 Set wb3 = ActiveWorkbook
 
 Calculate
 
 wb1.Save->bezieht sich auf nix -> also zuerst speichern
 wb2.Save->bezieht sich auf wb1 -> also als zweite speichern
 wb3.Save->bezieht sich auf wb2 -> also als dritte speichern
 
->Kopien anlegen
 wb1.SaveAs FileName:=C:\Kopie\Datei A.xls
 wb2.SaveAs FileName:=C:\Kopie\Datei B.xls
 wb3.SaveAs FileName:=C:\Kopie\Datei C.xls
 
->schliessen ohne speichern
 wb1.Close Savechanges:=False
 wb2.Close Savechanges:=False
 wb3.Close Savechanges:=False
AUFRAEUMEN:
 Set wb1 = Nothing: Set wb2 = Nothing: Set wb3 = Nothing
End Sub
 
  • #5
Das mit Workbooks.OpenText FileName:=... ist wahrscheinlich überflüssig, wenn nicht gar falsch. Das hab ich aus einer anderen Makro-Aufzeichnung mit Copy+Paste übernommen, ohne weiter nachzudenken. Funktioniert aber, obwohl es sich um echte Excel-Dateien handelt.
[Es gibt allerdings wirklich Dateien, die die Endung .xls haben, obwohl sie in Wirklichkeit Text-Dateien sind, zumindest halbwegs. Und zwar wenn man Abfrage-Ergebnisse aus SAP exportiert (Liste als Tabellenkalkulation sichern). Aber das ist eine ganz andere Geschichte.]

Zum Makro:
Ich kann nicht erkennen, was daran grundsätzlich anders sein soll, aber ich werde es am Montag gleich ausprobieren.
Das Problem tritt weder beim Original-Abspeichern auf, noch beim Schließen. Nur beim SaveAs woanders.

Ich dachte an irgendwas wie wb1.SaveAs FileName:=C:\Kopie\Datei A.xls CalculateAllesNochmal:=False

Na, schau mer mal. Danke einstweilen.
 
  • #6
Hallo klexy,

mein erster Gedanke war, dass zum Zeitpunkt des Schliessens der Datei C die Datei B geschlossen ist und für die Aktuallisierung von C wieder geöffnet und geschlossen wird (im Hintergrund).

Deshalb denk ich mir, ertsmal alles im geöffneten Zustand speichern und anschließend ohne Speichern schliessen.

Bin auch auf das Ergebnis gespannt. ;)

Wenn dieser Schritt nicht zum Erfolg führt, kannst du mir dann mal eine Probe der Dateien schicken ?

Gruß Matjes :)
 
  • #7
Hallo klexy,

ich hab mir das mal etwas genauer angesehen.

Hab mir 3 Dateien A,B,C so aufgebaut, daß
- A Werte enthält,
- B Formeln enthält, die auf Werte aus A verweisen
- C Formeln enthält, die auf Werte aus B bzw. Formelergebnisse aus B verweisen

In B in->DieseArbeitsmappe' habe ich folgendes Makro eingefügt:
Code:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Msgbox(B Calculate)
End Sub
Wird für Datei B neu berechnet, geht dann eine Msgbox auf.

Für C entsprechend:
Code:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Msgbox(C Calculate)
End Sub

Dann hab ich deinen Makro genommen, so modifiziert, daß die Pfade passen, und ihn dann auf die 3 Dateien losgelassen.
Ergebnis:
Nur das explizite Calculate im Makro erzeugt jeweils eine Msgbox für B und C. Beim Speichern wurde nicht neu berechnet.

Kannst Du das mit deinen Dateien mal nachvollziehen und schauen, ob bei dir doch eine 2. Neuberechnung durchgeführt wird ?

Gruß Matjes :)
 
  • #8
ohne Makro: Wenn ich eine Datei nach Bearbeitung mit F9 durchrechnen lasse, danach ein wenig hin und her klicke, aber nichts weiter ändere, will Excel beim Speichern&Schließen nochmal durchrechnen. Wenn man dann Escape drückt, bekommt man per Fehlermeldung die Möglichkeit, auf das erneute Durchrechnen vor dem Abspeichern zu verzichten.

Im Makro: Die Berechnung findet abgesehen vom ausdrücklichen Calculate-Befehl immer jeweils vor dem SaveAs statt.

Nach dem Testen deiner 3 Makros bin ich zu folgendem Ergebnis gekommen:
Das FileCopy-Makro bedeutet fast zwei Drittel Zeitersparnis. Vor dem ersten Abspeichern ist das gewollte Calculate, wodurch der erste Speichervorgang nicht durch ein erneutes Berechnen aufgehalten wird. Da die Dateien vor dem FileCopy schon geschlossen sind, entfällt das ungewollte Berechnen vor Datei B und C

Hier hab ich das Ergebnis in vereinfachter Form aufgeschrieben (falls mal jemand das Problem haben sollte.
Code:
Application.Calculation = xlManual->erstmal das automatische Berechnen ausschalten

Workbooks.Open FileName:=C:\Original\Datei A.xls
    Workbooks.Open FileName:=C:\Original\Datei B.xls
        Workbooks.Open FileName:=C:\Original\Datei C.xls
Calculate
       ->Abspeichern in umgekehrter Reihenfolge
        ActiveWindow.Close Savechanges:=True->C
    ActiveWindow.Close Savechanges:=True->B
ActiveWindow.Close Savechanges:=True->A

'hier ist die Reihenfolge jetzt wurscht
FileCopy C:\Original\Datei A.xls, C:\Kopie\Datei A.xls
FileCopy C:\Original\Datei B.xls, C:\Kopie\Datei B.xls
FileCopy C:\Original\Datei C.xls, C:\Kopie\Datei C.xls

Application.Calculation = xlAutomatic->automatisches Berechnen wieder einschalten
Der Vorteil dabei ist auch, daß die Dateien in beliebiger Reihenfolge rüberkopiert werden dürfen und nicht plötzlich Formeln aus dem Original-Ordner auf Dateien aus dem Kopie-Ordner verweisen. Jeder bleibt in seinem eigenen Ordner.

Danke Matjes :) :) :)
 
Thema:

Excel speichern ohne vorher alles durchzurechnen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben