Jump to content

VBA-Workbooks schließen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Boardgemeinde,

 

habe folgendes Problem, ich habe ein Macro, dass überprüft ob Excel-Workbooks geöffnet sind und dann diese Excel-Workbooks schließen soll, Problem dabei ist, dass es immer nur das erste Workbook (Datei1.xls) schließt, danach hört er auf. Kann mir jemand erklären warum?

 

Public Sub close_all()

   Dim x1 As Object
   Dim x2 As Object
   Dim x3 As Object
   Dim x4 As Object
   Dim x5 As Object
   Dim Found As Boolean
   Found = False

 For Each x1 In Workbooks
 If x1.Name = "Datei1.xls" Then
     Found = True
   End If
 Next x1
 If Found Then
   Workbooks("Datei1.xls").Activate
   ActiveWorkbook.Close SaveChanges:=False
 End If

 For Each x2 In Workbooks
 If x2.Name = "Datei2.xls" Then
     Found = True
   End If
 Next x2
 If Found Then
   Workbooks("Datei2.xls").Activate
   ActiveWorkbook.Close SaveChanges:=False
 End If

 For Each x3 In Workbooks
 If x3.Name = "Datei3.xls" Then
     Found = True
   End If
 Next x3
 If Found Then
   Workbooks("Datei3.xls").Activate
   ActiveWorkbook.Close SaveChanges:=False
 End If

 For Each x4 In Workbooks
 If x4.Name = "Datei4.xls" Then
     Found = True
   End If
 Next x4
 If Found Then
   Workbooks("Datei4.xls").Activate
   ActiveWorkbook.Close SaveChanges:=False
 End If

 For Each x5 In Workbooks
 If x5.Name = "Datei5.xls" Then
     Found = True
   End If
 Next x5
 If Found Then
   Workbooks("Datei5.xls").Activate
   ActiveWorkbook.Close SaveChanges:=False
 End If

End Sub

Link zu diesem Kommentar

Sub CloseAllWkbks()
         Dim WkbkName As Object

         On Error GoTo Close_Error
         Application.ScreenUpdating = False

         For Each WkbkName In Application.Workbooks()
             WkbkName.Close SaveChanges:=False
         Next

         Exit Sub

     ' Error handler.
     Close_Error:
         MsgBox Str(Err) & " " & Error()
         Resume Next
     End Sub

 

probiers hiermit bitte mal hiermit, das script hab ich damals mal geschrieben um alle Workbooks zu speichern und zu schliessen. Dein Script sieht irgendwie sehr wild aus, ich weiss nicht warum du immer wieder durch die Workbooks rennst, da eine If abfrage auch einen Or-operator hat. Un anstatt mit Found anschliessend das File zus chliessen könntest du doch gleich das ding beenden.

 

Probier mein Script mal aus, keine Garantien obs noch funktioniert, probiers einfach mal ;)

Link zu diesem Kommentar

Danke @ Morpheus,

 

soweit war ich auch schon mal, Problem ist aber bei deinem Skript, dass es alle Workbooks schließt. Ich möchte aber nur 5 bestimmte Workbooks schließen (Datei1-5).

 

Dieses Makro "close_all" wird von einem anderen Markro aufgerufen.

Nur beim ersten hört er auf(Datei1.xls wird geschlossen, nur die anderen nicht)?

Wenn ich nur dieses Makro aufrufe funktioniert es, aber nicht wenn es von anderen aufgerufen wird, da wird nur die Datei1 geschlossen und endet danach?!? Es kommen auch keine Fehlermeldungen.

Link zu diesem Kommentar

Sub CloseAllWkbks()
         Dim WkbkName As Object

         On Error GoTo Close_Error
         Application.ScreenUpdating = False

         For Each WkbkName In Application.Workbooks()
             if (WkbkName.Name = "Datei1.xls") or (WkbkName.Name = "Datei2.xls") or (WkbkName.Name = "Datei3.xls") or (WkbkName.Name = "Datei4.xls") or (WkbkName.Name = "Datei5.xls") then
             WkbkName.Close SaveChanges:=False
end if 

         Next

         Exit Sub

     ' Error handler.
     Close_Error:
         MsgBox Str(Err) & " " & Error()
         Resume Next
     End Sub

so hier mal mit or-operatoren

 

funtkioniert denn mein Script? oder hast du weiterhin das gleich problem das weiterhin nur ein Workbook geschlossen wird?

Link zu diesem Kommentar

Hi,

 

@franix

Dein Skript funktioniert bei mir auch mit mehreren Arbeitsmappen. Du Du hast jedoch vergessen, zwischen den einzelnen If-Abfragen die Variable FOUND wieder auf FALSE zu setzen. Dadurch versucht Dein Makro nach der ersten gefundenen Arbeitsmappe, auch alle nachfolgend aufgeführten zu schließen, auch wenn diese gar nicht geöffnet sind. Das führt dann natürlich zu einem Fehler.

 

Die Hilfe in Excel ist ansonsten auch recht ergiebig.

Das dort vorhandene Beispiel (Stichwort Workbooks) ist wie folgt:

For Each w In Workbooks
   If w.Name <> ThisWorkbook.Name Then
       w.Close savechanges:=True
   End If
Next w

Den kann man leicht in den Code wie von Zearom geschrieben überführen.

 

Tschau,

 

Sigma

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...