michi.wtr
Goto Top

String Variable in VBA enthält nicht den erwarteten Wert

Hey zusammen,

Ich bin gerade dabei, mein erstes Projekt in VBA zu entwickeln. Hierbei bin ich auf einen sehr weirden Fehler gestoßen:

Debug.Print DestPath
Debug.Print "D:\Temp\Pos1 - Wendestation  000201743A-01056565\Pos2 - Segmentowy lacznik rozporowy  000201743A-01055906\000201743A-01055906.xlsx"  
If Not DestPath = "D:\Temp\Pos1 - Wendestation  000201743A-01056565\Pos2 - Segmentowy lacznik rozporowy  000201743A-01055906\000201743A-01055906.xlsx" Then Debug.Print "NO"  
Template.DestinationWorkbook.SaveAs Filename:=DestPath

Ausgabe:
screenshot 2023-11-28 085759
Eigentlich möchte ich hier nur ein Workbook unter einem Pfad speichern. Die Ordner, in welche die Workbooks gespeichert werden, existieren bereits. Beim ersten Durchlauf erhalte ich wie erwartet NO, da die Werte nicht übereinstimmen, beim zweiten Durchlauf jedoch scheint es die gleiche Ausgabe des Strings DestPath und dem statischen Wert des Pfades ausgegeben zu werden, der Vergleich von beidem scheint aber nicht zu funktionieren.

Trim(DestPath)
liefert übrigens den gleichen Fehler, es haben sich also keine Leerzeichen eingeschlichen....

Beim speichern des Workbooks erhalte ich dann den Fehler:
screenshot 2023-11-28 090853

Warum steht hier anstelle der Endung .xlsx auf einmal ein Code /A95D6400 ?? Dieser ändert sich übrigens bei jeder Ausführung, ist also nicht immer derselbe Code.

Ist die Länge des Pfades hier schon ein Problem? eigentlich bin ich hier noch bei der Länge 130, sollte also eigentlich noch kein Problem sein....

Im String sind keine Sonderzeichen enthalten (é oder sowas), und auch die Leerzeichen sollten kein Problem sein, da wenn ich die Ordner und Dateien mit deutscher, englischer Bezeichnung speichere, so erhalte ich keine Fehler. Der String verhält sich nur beim speichern auf polnisch (bisher) so komisch, das würde ich aber mal ausschließen, sollte nur als Zusatzinfo dienen.

Vielen Dank schonmal im Voraus,
Micha

Content-ID: 31601358385

Url: https://administrator.de/contentid/31601358385

Ausgedruckt am: 23.11.2024 um 22:11 Uhr

michi.wtr
michi.wtr 28.11.2023 um 10:34:07 Uhr
Goto Top
Kuriose Fakten:

Wenn ich in der Zeile
Template.DestinationWorkbook.SaveAs Filename:=DestPath
einen Breakpoint setze, und in dem Direktfenster den Wert von DestPath ausgeben lasse (? DestPath), mir diesen Wert kopiere und auch im Direktfenster wieder DestPath zuweise (DestPath = "Pfad hier reinokpiert"), und das Programm fortsetze, dann funktioniert alles xD

Die Vermutung hat nicht funktioniert:
Template.DestinationWorkbook.SaveAs Filename:=CStr(DestPath)

PS: Ja DestPath ist mit As String im Funktionsaufruf definiert....
Blackmann
Blackmann 28.11.2023 um 10:57:38 Uhr
Goto Top
Moin @michi.wtr,

du arbeitetst doch mit VBA, warum weist Du der Variablen einen Wert mit := zu?
Das kenne ich nur aus Pascal-Sprachen.
Versuche mal =

MfG BM
michi.wtr
michi.wtr 28.11.2023 um 11:43:07 Uhr
Goto Top
Zitat von @Blackmann:
du arbeitetst doch mit VBA, warum weist Du der Variablen einen Wert mit := zu?

FileName ist in dem Fall keine Variable, sondern nur die Angabe des Parameternamen. Theoretisch kann ich das auch weglassen und direkt meine Variable der Sub SaveAs zuweisen, das habe ich nur mit eingebaut, dass Kollegen das Skript besser lesen können. Macht aber keinen Unterschied zu:

Template.DestinationWorkbook.SaveAs DestPath

Gruß,
Micha
michi.wtr
michi.wtr 28.11.2023 um 12:15:54 Uhr
Goto Top
Noch mehr kuriose Fakten: face-smile

Wenn ich vor der Zeile zum speichern des Worksheets noch einen Ordner erstellen lasse, funktioniert das, das Erstellen des Workbooks jedoch nicht?!?! (DestPath hier ohne ".xlsx" Erweiterung)
MkDir(DestPath)    ' Das Erstellen ist erfolgreich  
Template.DestinationWorkbook.SaveAs DestPath    ' Fehler.....  

Zudem ist der Vergleich von DestName mit dem Inhalt von DestName hier noch immer falsch?!
DebugPrint DestPath = "Statischer Inhalt von DestPath"    ' Liefert falsch....  
michi.wtr
Lösung michi.wtr 28.11.2023 aktualisiert um 22:51:31 Uhr
Goto Top
Das Problem ist, dass in einer Übersetzungstabelle, durch die der Name der Ordner und Workbooks gebildet wurde folgender Eintrag war:

Segmentowy łącznik rozporowy

Da ich davon ausging, dass sich die Methoden gleich verhalten, müsste auch das Workbook erstellt werden.
Jedoch scheint der String mit den Sonderzeichen gespeichert zu sein, welche bei Debug.Print und MkDir formatiert bzw. ersetzt werden, bei Workbook.SaveAs jedoch nicht.

Wen es interessiert:

Die Lösung war es, den Ordner, in welchem das Workbook gespeichert wurde, mit einem FileSystemObject zu erstellen. Mit MkDir werden Sonderzeichen ersetzt. Der String selber enthält diese noch, kann aber mit Debug.Print nicht überprüft werden, da Debug.Print ebenfalls die Sonderzeichen ersetzt. Soll heißen die Print Methode gibt nicht wirklich den String auf der Konsole aus.