Copilot06

Warum ich copilot in Excel nicht mag. Teil VI

Ich weiß, Power Query ist besser.

Trotzdem: Ich frage copilot:

Schreibe ein VBA-Makro, dass alle XLSX-Dateien des Ordners
D:\Eigene Dateien\Excel\Daten aufbereiten\Plan_IstAusMehrerenDateien\
zusammenfasst: das erste Tabellenblatt soll in eine neue Datei kopiert werden und diese Datei gespeichert werden als:
D:\Eigene Dateien\Excel\Daten aufbereiten\Plan_IstAusMehrerenDateien\Final.xlsx.
Melde, wenn das Makro fertig ist!

Ich erhalte ein sehr langes Makro.

Beim Scrollen entdecke ich:

Uff! – Was läuft denn hier falsch? Ich frage copilot und erhalte eine sehr ausführliche Antwort:

Guter Hinweis – danke!
Die problematische Zeile Plain Textvba wird nicht vollständig unterstützt. Die Syntaxhervorhebung basiert auf Plain Text.If StrComp GetFullPathSafe(wb), targetPath, vbTextCompare Then
Weitere Zeilen anzeigen

ist syntaktisch falsch und nutzt StrComp nicht korrekt. StrComp liefert -1/0/1, daher musst du die Rückgabe mit = 0 prüfen und Klammern setzen: Plain Textvba wird nicht vollständig unterstützt. Die Syntaxhervorhebung basiert auf Plain Text.If StrComp(GetFullPathSafe(wb), targetPath, vbTextCompare) = 0 Then
wb.Close SaveChanges:=False
hadExistingTarget = True
Exit For
End If
Weitere Zeilen anzeigen

Warum?

  • Klammern: Funktionsaufrufe in Bedingungen brauchen Klammern um die Argumente.
  • Vergleich auf Gleichheit: StrComp liefert 0, wenn die Strings gleich sind. Ohne = 0 ist der Ausdruck kein Boolean und führt zu einem Fehler.

Korrigierter Ausschnitt (Drop-in Replacement)

Ersetze den gesamten Block, der die geöffnete Zieldatei schließt, durch: Plain Textvba wird nicht vollständig unterstützt. Die Syntaxhervorhebung basiert auf Plain Text.‘ Falls Zieldatei offen ist, schließen (ohne Speichern), damit wir sauber neu schreiben können
hadExistingTarget = False
Dim wb As Workbook
For Each wb In Application.Workbooks
‚ Vergleiche vollständigen Pfad des offenen Workbooks mit targetPath, case-insensitive
If StrComp(GetFullPathSafe(wb), targetPath, vbTextCompare) = 0 Then
wb.Close SaveChanges:=False
hadExistingTarget = True
Exit For
End If
Next wb
Weitere Zeilen anzeigen

Tipp (robuster): Bei nicht gespeicherten/temporären Arbeitsmappen liefert FullName ggf. leer. Du hast dafür schon GetFullPathSafe. Falls du ganz sicher gehen willst, dass leere Pfade nicht „gleich“ sind, ist die obige Variante schon safe, weil StrComp("", targetPath, …) ≠ 0 ist.

Warum nicht gleich korrekt?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.