Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA : Alle Workbook bis auf eines schliessen

VBA : Alle Workbook bis auf eines schliessen
30.09.2004 11:01:34
Joe
hiho,
hab das problem, dass ich am ende meines makros immer n haufen leerer mappen
(fallen beim SaveAs) und die haupttabelle auf hab.
wie könnte ich das in VBA lösen, alle offenen woorkbooks bis auf ein benanntes ( in meinem fall das "hauptprogramm" ) zu schliessen ?!
hoffe ihr könnt mir helfen !
Danke im voraus...
Joe
Anzeige
AW: VBA : Alle Workbook bis auf eines schliessen
Dr.
Stattdessen baust Du besser ein ActiveWorkbook.Close nach dem Saven ein.
AW: VBA : Alle Workbook bis auf eines schliessen
Joe
das hab ich ja...
es läuft so:
er öffnet n neues workbook
füllt es mit daten aus der haupt-tabelle
zeigt mit die saveAs-box mit names-vorschlag an
und schliesst workbook nach dem speichern
allerdings is ja jetzt auch noch ne leere mappe offen also das ursprungs-work-book..ich poste es einfach mal :

Sub Donnerstag()
Dim Neue As Workbook
Set Neue = Workbooks.Add
Workbooks.Add
Windows("Tagesbilanz.xls").Activate
Sheets("Auswertung").Select
ActiveSheet.ChartObjects("Diagramm 5").Activate
ActiveChart.ChartArea.Copy
ActiveWindow.Visible = False
Neue.Activate
Range("A28").Select
ActiveSheet.Paste
ActiveWindow.Visible = False
u.s.w.
Windows("Tagesbilanz.xls").Activate
Sheets("Tabellen-Beschriftung").Select
Application.SendKeys Range("F6").Value
Neue.Activate
Sheets("Tabelle1").Name = "Woche1"
Sheets("Tabelle2").Name = "Woche2"
Sheets("Tabelle3").Name = "Woche3"
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close
End Sub

hoffe das erklärt die sache...
joe
Anzeige
AW: VBA : Alle Workbook bis auf eines schliessen
Dr.
Jo, dann schliesst Du das Teil nach dem .Copy
AW: VBA : Alle Workbook bis auf eines schliessen
WernerB.
Hallo Joe,
wie gefällt Dir das?

Sub AlleSchliessen()
Dim Wkb As Workbook
For Each Wkb In Workbooks
If Wkb.Name <> ThisWorkbook.Name Then
Wkb.Close SaveChanges:=False
Next Wkb
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: VBA : Alle Workbook bis auf eines schliessen
Joe
Hiho werner,
das sieht gut aus...werds nach mittagspause gleich mal umsetzen ;)
...hoffe du meinst mit deinem P.S. nicht mich..ich antworte immer und war grad damit beschäftigt einen auszug des makros zwecks beserem verständnis zu posten ( s.o.)
also thx für die lösung!
Joe
AW: VBA : Alle Workbook bis auf eines schliessen
01.10.2004 08:33:36
Joe
Moin moin,
leider klappr der code net so wie er soll :(

Sub AlleSchliessen()
Dim Wkb As Workbook
For Each Wkb In Workbooks
If Wkb.Name <"hier den namen von der datei die OFFEN bleiben soll?"> ThisWorkbook.Name Then   <<-- (was bewirkt "this workbook.name" ?)
Wkb.Close SaveChanges:=False
Next Wkb
End Sub

hmm..was muss ich da ändern ?
er soll ja im grunde alle offenen workbooks als Wkb setzen, dann schauen, ob das activierte mit dem vorgegebenen namen übereinstimmt und falls das net der fall ist, schliessen. das soll mit allen wkb´s gemacht werden und wenn nur noch das eine offen is, soll er den

Sub beenden...
hoffe ihr könnt mir n tip geben..dauert ja leider seine zeit, bis man VBA mit learning by doing begriffen hat :(
besten dank
Joe

Anzeige
AW: VBA : Alle Workbook bis auf eines schliessen
WernerB.
Hallo Joe,
die beiden Pfeile "" sind Operatoren und bedeuten in dieser Kombination "ungleich".
"ThisWorkbook" ist das Workbook (=Mappe bzw. Datei), in dem das Makro steht (egal, wie es heißt).
Berücksichtigt man dies nicht, könnte es sein, dass sich die Datei, die das Makro beinhaltet, selbst schließt (und damit auch das Makro beendet), bevor alle anderen Dateien geschlossen sind.
Selbstverständlich kannst Du den Code noch erweitern, z.B. so:

Sub AlleSchliessen()
Dim Wkb As Workbook
For Each Wkb In Workbooks
If Wkb.Name <> ThisWorkbook.Name And _
Wkb.Name <> "MeineDatei.xls" Then
Wkb.Close SaveChanges:=False
Next Wkb
End Sub

Gruß
WernerB.
Anzeige
AW: VBA : Alle Workbook bis auf eines schliessen
Joe
Moin Werner,
aha..solangsam lichtet sich die sache...mit ThisWorkbook is das natürlich elegant gelöst aber da ich dachte in die eckigen klammern gehört n name, hat das natürlich nie geklappt ;)
habs dann schliesslich mit ner variable gelöst...werd jetzt aber deine lsg. einbauen.
is fehlersicherer!

Sub AlleSchliessen()
Dim Haupt As String
Haupt = InputBox("Name der Haupt-Datei: ", "Schliesser", "Bilanz.xls")
Dim WB As Workbook
For Each WB In Workbooks
If Not WB.Name = Haupt Then WB.Close Else:
Next WB
End Sub

also besten dank für die erläuterung !
sincerly
Joe
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Alle Workbooks bis auf eines mit VBA schließen


Schritt-für-Schritt-Anleitung

Um alle offenen Workbooks in Excel mit VBA zu schließen, außer einem benannten Workbook, kannst du den folgenden Code verwenden. Dieser Code nutzt eine Schleife, um durch alle offenen Workbooks zu iterieren und schließt jedes Workbook, das nicht das angegebene ist.

Sub AlleSchliessen()
    Dim Wkb As Workbook
    For Each Wkb In Workbooks
        If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "Hauptprogramm.xls" Then
            Wkb.Close SaveChanges:=False
        End If
    Next Wkb
End Sub

In diesem Beispiel bleibt das Workbook mit dem Namen "Hauptprogramm.xls" geöffnet. Du kannst den Namen nach Belieben anpassen.


Häufige Fehler und Lösungen

Fehler: Der Code schließt das Workbook, in dem das Makro läuft.

Lösung: Stelle sicher, dass du ThisWorkbook.Name verwendest, um zu überprüfen, ob das aktuelle Workbook das ist, das du offen halten möchtest. So wird vermieden, dass das Makro sich selbst schließt.


Alternative Methoden

Falls du eine andere Methode zur Schließung der Workbooks bevorzugst, kannst du auch eine Eingabeaufforderung verwenden, um den Namen des zu schützenden Workbooks festzulegen:

Sub AlleSchliessenMitEingabe()
    Dim Haupt As String
    Haupt = InputBox("Name der Haupt-Datei: ", "Schliesser", "Hauptprogramm.xls")
    Dim WB As Workbook
    For Each WB In Workbooks
        If Not WB.Name = Haupt Then
            WB.Close SaveChanges:=False
        End If
    Next WB
End Sub

Hierbei wird der Benutzer aufgefordert, den Namen des Workbooks einzugeben, das geöffnet bleiben soll.


Praktische Beispiele

Ein praktisches Beispiel für die Anwendung der For Each-Schleife:

Sub AlleWorkbooksSchliessen()
    Dim wb As Workbook
    For Each wb In Workbooks
        ' Aktuelles Workbook schließen, wenn es nicht "Tagesbilanz.xls" ist
        If wb.Name <> "Tagesbilanz.xls" Then
            wb.Close SaveChanges:=False
        End If
    Next wb
End Sub

In diesem Beispiel bleibt das Workbook "Tagesbilanz.xls" geöffnet, während alle anderen Workbooks geschlossen werden.


Tipps für Profis

  • Fehlerbehandlung: Füge eine Fehlerbehandlung hinzu, um sicherzustellen, dass dein Makro auch bei unerwarteten Bedingungen stabil bleibt.
On Error Resume Next
  • Sichtbarkeit: Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms zu vermeiden, während die Workbooks geschlossen werden.

FAQ: Häufige Fragen

1. Frage: Was bewirkt ThisWorkbook.Name?

Antwort: ThisWorkbook.Name gibt den Namen des Workbooks zurück, in dem das Makro ausgeführt wird. Es sorgt dafür, dass dieses Workbook nicht geschlossen wird.

2. Frage: Wie kann ich mehrere Workbooks offen halten?

Antwort: Du kannst die Bedingung in der If-Anweisung erweitern, um mehrere Workbook-Namen zu berücksichtigen:

If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "Hauptprogramm.xls" And Wkb.Name <> "Zusatzdatei.xls" Then

Mit diesen Anleitungen kannst du effektiv alle offenen Workbooks bis auf eines in Excel VBA schließen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige