Ich habe einen VBA-Makro in eine Excel-Tabelle geschrieben, der alle Arbeitsmappen an einem bestimmten Speicherort öffnet und Daten aus diesen Arbeitsmappen extrahiert und validiert und in die aktive Arbeitsmappe kopiert. Es öffnet dann die nächste Arbeitsmappe in dem Verzeichnis und wiederholt den Prozess, bis alle Dateien in dem Verzeichnis gelesen worden sind.VBA schließt keine programmatisch geöffneten Arbeitsbücher
Alles funktioniert, außer ich kann nicht scheinen, um die Zielarbeitsmappen zu schließen, sobald sie geöffnet sind. Dies schließt das Schließen von Excel ein. Ich muss den Prozess im Task-Manager oder in Powershell beenden, um die Arbeitsmappe aus dem Systemarbeitsspeicher zu befreien.
Set fs = CreateObject("Scripting.FileSystemObject")
strExcelFileName = Dir(ThisWorkbook.Path & "\Certs\*.xls", vbNormal)
Set xlApp = CreateObject("Excel.Application")
Do While (strExcelFileName <> "")
xlApp.Workbooks.Open (ThisWorkbook.Path & "\Certs\" + strExcelFileName)
'code to run for each workbook opened
***xlApp.Workbooks.Close*** 'when present, Excel freezes
strExcelFileName = Dir 'next file in directory
Loop
Wenn die xlApp.Workbooks.Close Linie vorhanden ist und im Programm aufgerufen, Excel jedes Mal, friert ein. Ohne es kann ich 3-5 Workbooks durchlaufen, bevor das System überfordert ist und einfriert. Ich muss dann diese Prozesse beenden, diese Dateien verschieben, weitere 3 verschieben und wiederholen, bis alle Dateien auf diese Weise verarbeitet wurden. Es dauert etwa anderthalb Stunden, um durch 50 zu gehen.
Was ich versuche zu tun, ist die Arbeitsmappe, wo die Daten von geschlossen werden, bevor die nächste geöffnet wird.
ActiveWorkbook.Close
Diese versucht, die Arbeitsmappe zu schließen, wo das Makro, nicht die Arbeitsmappe ausgeführt wird, die von zu lesenden geöffnet wurde.
Das funktionierte perfekt. Danke –