Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Datei speichern und schließen...





Frage

Hallo, gibt es eine Möglichkeit für folgendes Problem: ich will über einen Makro mehrere Dateien öffnen. Das habe ich hinbekommen. Wenn ich nun einen Knopf drücke, sollen die geöffneten Dateien (nicht ALLE Exceldateien, da ja noch andere geöffnet sein könnten) gespeichert und geschlossen werden. Das habe ich hierdurch gemacht: Windows("abc.xls").Activate ActiveWorkbook.Save ActiveWorkbook.Close Windows("xyz.xls").Activate ActiveWorkbook.Save usw. usw. Wenn jetzt aber jemand zwischendurch eine der Dateien manuel geschlossen hat, erscheint ein Fehler in VBA. Kann man hier irgendwie einbauen "wenn die Datei geöffnet ist, dann speichern, schließen und zur nächsten gehen"??? Danke im Voraus!

Antwort 1 von piano

Hallo
wie wärs mit einer Schleife:
 Sub Schliessen()

i = Workbooks.Count
On Error Resume Next
Do While True
Windows(i).Activate
If ActiveWorkbook.Name <> "Mappe1.xls" Then
    ActiveWorkbook.Save
    ActiveWorkbook.Close
End If
i = i - 1
If i < 1 Then Exit Sub
Loop
End Sub


Gruß piano

Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von qwerewq

Danke für den Tipp - wie kann ich das jetzt aber einbinden? Muss ich das kopieren und für jede Arbeitsmappe abändern?

Antwort 3 von piano

Hallo
In dem Beispiel werden alle offenen Mappen geschlossen, ausser "Mappe1.xls" (das ist die Master-Datei!). Du musst natürlich hier nur den (oder die) Namen der Mappe(n) eingeben, die offenbleiben soll(en).
Diesen Makro würde ich in ein "Zeichnen"-Objekt (Autoformen - Standardformen - Rahmen) der Master-Datei einbinden. (daher logischerweise diese Mappe nicht schliessen)
Gruss piano

Antwort 4 von qwerewq

Achso, verstehe. Aber das heißt doch, dass ALLE Mappen geschlossen werden. Wie kann ich erreichen, dass nur die Mappen geschlossen werden sollen, die zum Projekt gehören? Es könnte ja sein, dass eine andere Mappe geöffnet ist, die damit nichts zu tun hat?

Antwort 5 von piano

Hast Du ein Kriterium für die Projekt-Mappen?
z.Bsp. "_MyProject" irgendwo im Dateinamen:
 If InStr(1, ActiveWorkbook.Name , "_MyProject") > 0 then
   ActiveWorkbook.Save 
   ActiveWorkbook.Close 
end if

als zusätzliche Bedingung.
oder wenn in bestimmten Pfad, dann:
 if ActiveWorkbook.Path = "C:Dokumente und EinstellungenpianoEigene Dateien" then

als Bedingung.

Antwort 6 von qwerewq

Mhmm, mit Pfadangaben könnte das gehen, allerdings sind einige Dateien in Unterordnern geöffnet... Kann man irgendwie auf den Hauptordner Bezug nehmen??

Antwort 7 von piano

Machs wie ich beim Namen gezeigt habe (Teilstringsuche) :
 If InStr(1, ActiveWorkbook.Path , "MyProjectHauptordner") > 0 then 


Antwort 8 von qwerewq

Klasse! Das klappt wunderbar! Habe jetzt folgenden Code hinter Deine Anweisung geschrieben, um die Excelmappe zu speichern und zu schließen, in der der Makro ausgeführt wird. Leider klappt das nicht und diese Datei bleibt als einzige offen. Kann man da noch was machen?

Windows("start.xls").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close

Antwort 9 von piano

Wenn dieser Code unmittelbar vor "End Sub" steht und der Name der Arbeitsmappe richtig ist, dann muss es klappen!
Teste eventuell mit
MsgBox ActiveWorkbook.Name 

vor
Windows("start.xls").Activate 
 


Antwort 10 von qwerewq

Das klappt leider nicht. Kann es sein, dass er aus der Schleife direkt an das Ende der Anweisung springt und somit die letzte Anweisung, die außerhalb der Schleife steht, nicht mehr berückstichtigt?

Antwort 11 von piano

Nein, kann nicht - höchstens im Fehlerfall!
Nimm die Anweisung
 On Error Resume Next 

mal heraus und teste!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: