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:
StrCompliefert0, wenn die Strings gleich sind. Ohne= 0ist 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
FullNameggf. leer. Du hast dafür schonGetFullPathSafe. Falls du ganz sicher gehen willst, dass leere Pfade nicht „gleich“ sind, ist die obige Variante schon safe, weilStrComp("", targetPath, …)≠ 0 ist.
Warum nicht gleich korrekt?