Hi Manfred,
zunächst mal, da Counter immer auf 0 bleibt kannst du
If OffeneDatei.Count
auch gleich so schreiben:
For a = 1 To ZuLDatei.Count
OffeneDatei.Add a
Next a
Der counter ist nur da zu da, wenn die anzahl der benötigten sheets nicht gleich der offnen sheets ist. um offene und benötigte anzugleichen.
Weiterhin, da ZuLDatei.Item(a) immer ein längerer String ist
und
OffeneDatei.Item(a) immer eine kleine Zahl
verstehe ich die Abfrage
If Not LCase(OffeneDatei.Item(a)) = LCase(ZuLDatei.Item(a))
Then
sowieso nicht, denn die Wenn-Bedingung wird immer erfüllt!?
falls bereits offene sheets vorhanden sind, das sie nicht noch mal geladen werden.
Und der Fehler wird vorbereitet durch OffeneDatei.Remove (a)
danke, das hab ich total übersehen.
wenn ich statt
For a = 1 To ZuLDatei.Count
For a = ZuLDatei.Count To 1 Step -1
erledigt sich von selber
danke
For a = 1 To ZuLDatei.Count
If Not LCase(OffeneDatei.Item(a)) = LCase(ZuLDatei.Item(a))
Then
'…
'…
'…
End If
OffeneDatei.Remove (a)
Next a
Beim zweiten For-Durchgang steht ja im Vergleich:
If Not LCase(OffeneDatei.Item(2)) = LCase(ZuLDatei.Item(2))
Then
und das muß krachen da du grad mit OffeneDatei.Remove (a) das
Item
OffeneDatei.Item(2) entfernt hast.
Nicht wichtig, aber ich würde
If ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“).Value
= „Abfrage“ Then Speichern = „“
ElseIf
ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“).Value =
„Ja“ Then Speichern = „SaveChanges:=True“
ElseIf
ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“).Value =
„Nein“ Then Speichern = „SaveChanges:=False“
End If
so schreiben (für mich ein bißchen übersichtlicher und es wird
auch abgefangen wenn in L8 z.b „Abfage“ steht):
(Eine case-Select Abfrage wäre auch eine Option)
Speichern = „“
If ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“).Value
= „Ja“ Then Speichern = „SaveChanges:=True“
If ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“).Value
= „Nein“ Then Speichern = „SaveChanges:=False“
Oder, um schmäleren Code zu bekommen With benutzen
With
ThisWorkbook.Worksheets(„Einstellungen“).Range(„L8“)
Speichern = „“
If .Value = „Ja“ Then Speichern = „SaveChanges:=True“
If .Value = „Nein“ Then Speichern = „SaveChanges:=False“
End With
Im Anhang ist ein Beispiel wie das dann aussieht.
Vielleicht kannst du mal sagen was da eigentlich im Code
geschehen soll, mir ist da einiges nicht klar
Gruß
Reinhard
'…
Dim Datei As String
'…
With ThisWorkbook.Worksheets(„Einstellungen“)
If .Range(„K8“).Value = „Ja“ Then
For a = 1 To ZuLDatei.Count
If Not LCase(OffeneDatei.Item(a)) =
LCase(ZuLDatei.Item(a)) Then
Datei = IIf(.Range(„I8“) = „“, ThisWorkbook.Path,
.Range(„I8“).Value)
Datei = Datei & „“ & .Range(„C“ &
ZuLZeile.Item(a)).Value & „“ & ZuLDatei.Item(a)
Workbooks.Open FileName:=Datei
End If
'löscht die die bereits geöffnete Excel datei aus der
Liste OffeneDateien
OffeneDatei.Remove (a)
Next a
'Prüft ob die Excel vor’n schliessen geschpeichert
werden soll
Speichern = „“
If .Value = „Ja“ Then Speichern = „SaveChanges:=True“
If .Value = „Nein“ Then Speichern = „SaveChanges:=False“
'schliest nicht benö¶tigte Excel Dateien
If OffeneDatei.Count > 0 Then
For a = 1 To ZuLDatei.Count
Workbooks(OffeneDatei.Item(a)).Close Speichern
Next a
End If
End If
End With