franix 10 Geschrieben 17. Januar 2008 Melden Teilen Geschrieben 17. Januar 2008 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 Zitieren Link zu diesem Kommentar
Zearom 10 Geschrieben 17. Januar 2008 Melden Teilen Geschrieben 17. Januar 2008 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 ;) Zitieren Link zu diesem Kommentar
franix 10 Geschrieben 17. Januar 2008 Autor Melden Teilen Geschrieben 17. Januar 2008 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. Zitieren Link zu diesem Kommentar
Zearom 10 Geschrieben 17. Januar 2008 Melden Teilen Geschrieben 17. Januar 2008 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? Zitieren Link zu diesem Kommentar
Sigma 10 Geschrieben 19. Januar 2008 Melden Teilen Geschrieben 19. Januar 2008 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.