Collapse column

Autor Thema: Office 2010: Workbooks(xxx).close savechanges:= true -> speichert aber schliesst nicht  (Gelesen 1657 mal)

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Hallo,

ich habe eine selbsame Reaktion meines Makros.

Aus ThisWorkbook heraus öffne ich eine zweite Arbeitsmappe, manipuliere diese über ActiveWorkbook.
Danach möchte ich diese (zweite) Arbeitsmappe speichern und schließen.

Sowohl
   ActiveWorkbook.Close savechanges:=True
als auch
   Workbooks(strManuelleDatei).Close savechanges:=True
speichern die Arbeitsmappe aber schließen diese nicht. Das Problem hatte ich bisher nicht - darum kann ich mir das gerade nicht erklären.

Ich möchte also Excel nicht beenden (Application.Quit) sondern lediglich die zweite Arbeitsmappe speichern (klapp) und schliessen (klappt nicht). Thisworkbook soll weiter geöffnet bleiben ...

Freue mich über jede Idee, warum das ausgerechnet im vorliegenden Fall nicht funktioniert

Danke und Grüße
Rainer

Wo ich bin, ist oben und vorn!

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Hallo,

das ist leider nicht nachvollziehbar. Poste mal den Code.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Hallo maninweb,

das ist ein sehr umfangreiches Projekt. Der relevanten Ausschnitt:

      'manuelle Datei synchronisieren
      'da Automatikmodus => kein Abbruch, falls mehr als eine Datei vorhanden
      '=> geöffnet wird die erste, die Excel findet, falls mehr als eine manuelle Datei vorhanden!
      strManuelleDatei = Dir(strSchedulerPfad & "Arbeitskalkulation NL GUN*_MANUELL.xlsm")
     
      'a) manuelle Datei öffnen
      Workbooks.Open Filename:=strSchedulerPfad & strManuelleDatei
     
      'b) Blattschutz manuelle Datei ausschalten
      ActiveWorkbook.Worksheets("Historie").Unprotect Password:="xxx"
      ActiveWorkbook.Worksheets("Projektspez").Unprotect Password:="xxx"
     
      'c) Inhalt Tabellenblatt Projektspez und Historie in manueller Datei löschen
      ActiveWorkbook.Worksheets("Projektspez").UsedRange.ClearContents
      ActiveWorkbook.Worksheets("Historie").UsedRange.ClearContents
     
      'd) Werte aus Auto-Datei Tabellenblatt Projektspez und Historie nach manuelle Datei kopieren
      ThisWorkbook.Worksheets("Projektspez").UsedRange.Copy _
         ActiveWorkbook.Worksheets("Projektspez").Range("A1")
         
       ThisWorkbook.Worksheets("Historie").UsedRange.Copy _
         ActiveWorkbook.Worksheets("Historie").Range("A1")
     
      'e) Blattschutz manuelle Datei einschalten
      ActiveWorkbook.Worksheets("Historie"). _
         Protect Password:="*", _
         AllowFormattingCells:=True, _
         AllowFormattingColumns:=True, _
         AllowFormattingRows:=True, _
         DrawingObjects:=False, _
         Contents:=True, _
         Scenarios:=True
         
      ActiveWorkbook.Worksheets("Projektspez"). _
         Protect Password:="*", _
         AllowFormattingCells:=True, _
         AllowFormattingColumns:=True, _
         AllowFormattingRows:=True, _
         DrawingObjects:=False, _
         Contents:=True, _
         Scenarios:=True
         
      'ThisWorkbook und die manuelle Datei sichern, nachdem Projektspez und Historie
      'aus den Projektleiterdateien aktualisiert wurden
      ThisWorkbook.Save
      'ActiveWorkbook.Close savechanges:=True
      Workbooks(strManuelleDatei).Close savechanges:=True

Danke vorab für die Unterstützung

BG
Rainer
     
Wo ich bin, ist oben und vorn!

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Hallo,

ich würde mich nicht auf ActiveWorkbook verlassen, weil dies immer die aktive Mappe repräsentiert.
Insofern würde ich erstmal alle ActiveWorkbook-Anweisungen, die sich auf die geöffnete Mappe
beziehen durch eine vollständige Referenzierung ersetzen. Zum Beispiel so...

Code: Visual Basic
  1. With Application.Workbooks(strManuelleDatei)
  2.  
  3. ' Blattschutz...
  4.  
  5.  .Worksheets("Historie").Unprotect Password:="xxx"
  6.  .Worksheets("Projektspez").Unprotect Password:="xxx"
  7.  
  8. ' :
  9. ' Weitere Anweisungen, die sich auf strManuelleDatei beziehen
  10. ' :
  11.  
  12.   ThisWorkbook.Worksheets("Historie").UsedRange.Copy _
  13.  .Worksheets("Historie").Range ("A1")
  14.  
  15. ' :
  16. ' Weitere Anweisungen, die sich auf strManuelleDatei beziehen
  17. ' :
  18.  
  19.  .Close SaveChanges:=True
  20.  
  21. End With
  22.      
  23. ThisWorkbook.Save

Ansonsten könntest Du auch prüfen, ob nicht in der geöffneten Datei ein Makro im Codemodul
für DieseArbeitsmappe das Speichern/Schließen unterbindet.

Ggf. auch mal Debug.Print Err.Description vor und nach .Close SaveChanges:=True einbauen
und schauen, was das Direktfenster sagt.

Gruß
« Letzte Änderung: Juni 06, 2017, 17:04:26 Nachmittag von maninweb »
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Hallo maninweb,

danke, das probiere ich aus, erst einmal vielen Dank!

BG
Rainer
Wo ich bin, ist oben und vorn!

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Guten Morgen, maninweb,

ich habe folgendes gecheckt/ausprobiert:

1) in Workbooks(strManuelleDatei) gibt es - neben den nicht-eventgesteuerten Makros - nur Workbook_Open().
Also nichts, was m. E. das Schließen verhindern sollte

2) Debug.Print Err.Description gibt vor und nach dem .Close savechanges:=True nur einen leeren String aus.
Alles andere hätte mich gewundert, ich habe ein Errorhandling programmiert, das Laufzeitfehler in einem Errorlog festhälgt. Da ist auch nichts vermerkt. Hintergrund: mein Makro läuft auf einem unserer Server Schedulergesteuert, deshalb das Log-File (sonst bekomme ich im Fehlerfall nichts mit)

3) Ich habe mir ActiveWorkbook auch nur getraut, weil das Makro nachts vom Scheduler gesteuert läuft. Trotdem habe ich ActiveWorkbook durch Workbooks(strManuelleDatei) ersetzt.

4) Meinen Rechner neu gebootet (hatte ich bereits vor meinem Post im Forum erledigt), um auszuschließen, dass da noch ein Excel-Prozess im Hintergrund stört

Leider besteht mein Problem weiterhin - bin ehrlich etwas ratlos ...

Danke und Grüße
Rainer
Wo ich bin, ist oben und vorn!

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Hallo Rainer,

da wird's schwierig bzw. ohne das zu sehen, kann ich nicht mehr viel dazu sagen. Du könntest mal versuchen, Excel im Safe-Mode zu starten.
Das geht z.B. über das Windows Suchfeld Excel.exe /s + Enter. Im Safe-Mode werden alle Add-Ins usw. deaktiviert. Dann über Datei öffnen
mal Deine Anwendung laufen lassen. Sollte das Problem behoben sein, dann ist's ein fremdes Add-In. Wenn nicht, dann, schwierig ...

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Hallo maninweb,

leider auch kein Erfolg, im abgesicherten Modus gleiche Reaktion.

Ich habe folgenden Workaround:

Da das Makro als Schedulerjob läuft und beide Mappen (ThisWorkbook und die 2. Datei) in der selben Instanz geöffnet sind, schließe ich die Instanz am Makroende mit Application.Quit, dann sind beide Workbooks und die Excel-Instanz am Server wieder geschlossen. Da das savechanges:=true funktioniert ist danach alles gut.

Vielen Dank für Deine Hilfe, mehr geht ohne detailierte Analyse des Codes (und der Konfiguration meines Rechners) nicht!
Das Forum wird seinem erstklassigen Ruf mehr als gerecht :-)

BG, Rainer
Wo ich bin, ist oben und vorn!

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
Hallo maninweb,

das Problem ist gelöst- scheinbar war die 2. Datei korrupt.

Der Befehl Workbooks(strManuelleDatei).Close savechanges:=True hat KEINEN Laufzeitfehler produziert. Ebenfalls lässt sich die Datei ohne Fehler öffnen ...

Beim Umstellen des Codes auf
1. Workbooks(strManuelleDatei).Save
2. Workbooks(strManuelleDatei).Close
ist der .Save auf Laufzeitfehler 1004 gelaufen.

Dann habe ich versucht, die 2. Datei über das Menü zu speichern. Dabei habe ich auch eine Fehlermeldung kassiert:
"Fehler beim Speiern von xxx. Durch Entfernen oder Reparieren einiger Features kann die Datei von Microsoft Excel möglicherweise gespeichert werden. Klicken Sie auf "Weiter", um die Reparatur in einer neuen tei auszuführen ...."

Nachdem ich die 2. Datei neu erzeugt habe, läuft das Makro ohne Fehler durch.

Warum aber der .CloseSavechanges trotzdem die Datei gespeichert und nicht geschlossen hat, erschließt sich mir nicht.

Trotzdem vielen Dank, das Problem ist gelöst

Viele Grüße
Rainer
Wo ich bin, ist oben und vorn!

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Hallo Rainer,

prima, dass Du das Problem lösen konntest. Sehr interessant ist übrigens, dass .Close True nicht auf einen Fehler gelaufen ist.
Und .Save sehr wohl. Wenn man das generell mit fehlerhaften Dateien reproduzieren könnte (muss man erstmal welche haben),
dann liesse sich ein Bug daraus ableiten.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline RainerW

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2010
... den Rainer-Bug, wenn schon kein Komet und keine Rose nach mir benannt wurde ;D
Wo ich bin, ist oben und vorn!

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.