hier wurde mir sehr von "Werner" und "ralp_b" sehr geholfen: https://www.herber.de/forum/archiv/1788to1792/1789317_nur_bestimmte_Dateien_aus_Liste_oeffnen.html
Stehe nun aber vor dem Problem das nur die erste zu öffnende Datei wieder geschlossen wird, alle anderen bleiben geöffnet.
Egal wo ich "objWb.Close" einfüge, um in der SChleife die Datei wieder zu schließen, bekomme ich eine Fehlermeldung "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt"
Einen Umweg funktioniert mittels:
For Each wb In Workbooks
If wb.Name ThisWorkbook.Name Then
wb.Close savechanges:=False
End If
Next wb
Dann würden aber auch evtl Excel-Dateien geschlossen die vor der Makroabarbeitung schon offen waren.
Auch weis ich nicht was passiert wenn Excel mehr als 100 Dateien per SChleife öffnet - hängt sich Excel irgendwann auf bzw überfordert dies die Hardware?
Setzte ich direkt unter " Set objWb = Workbooks.Open(strVerzeichnis & .Cells(i, "A")) "
" Calculate "
" objWb.Close 'SaveChanges:=False "
werden Dateien scheinbar im Hintergrund geöffnet aber die daraufzugreifenden INDIREKT-Formeln werden in der Hauptdatei (wo der Code steht) nicht berechnet.
Daher die Bitte ans Forum über den untenstehenden Code zu schauen, ob er umgebaut werden müsste oder wo ich den Befehl "objWb.Close" einfügen muss bzw wo er in der Schleife deklariert werden muss, um die Datei die in der Schleife ermittelt und geöffnet wird nach dem "Calculate" sofort wieder schließen zu können, um den Berechnungsaufwand gering bzw zu verhindern, das sich Excel nach mehr als 100 Dateien aufhängt.
Die erste zu öffnende Datei wird ja komischerweise wieder geschlossen bzw nicht angezeigt (es sind 9 Dateien zu öffnen, die auch geöffnet werden, aber 8 Dateien bleiben offen bestehen).
Code:
Sub nur_vorhandene_Dateien_oeffnen_und_schließen()
Dim strVerzeichnis As String, i As Long, objWb As Workbook
Dim wb As Workbook
With Application
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
strVerzeichnis = ThisWorkbook.Path & "\"
With Worksheets("Dateien_Ist")
For i = 1 To .Cells(.Rows.Count, "B").End(xlUp).Row
If UCase(.Cells(i, "B")) = "X" Then
Set objWb = Workbooks.Open(strVerzeichnis & .Cells(i, "A"))
End If
Calculate
objWb.Close 'SaveChanges:=False
Next i
End With
Set objWb = Nothing
Application.EnableEvents = True
ScreenUpdating = True
DisplayAlerts = True
End Sub
Vielen Dank im vorraus eines VBA- und SChleifenanfängers.
Norman S.