VBA Syntaxfehler

Guten Tag werte Experten,

Ich benutze in Excel volgenden Code um einen Ordner zu erstellen und die Datei darin zu speichern:

Sub speichern()

’ speichern Makro

’ Tastenkombination: Strg+p

’ speichert die datei
Dim strFilename As String
Dim strOrdner As String, varOrdner, i As Integer, strZeichen As String

strOrdner = "C:\Users\tages\Documents\Test Makro\Neuer Ordner\" & ActiveSheet.Range("d1").Text
varOrdner = Split(strOrdner, "\")

strOrdner = varOrdner(0)
For i = 1 To UBound(varOrdner)
    If fncheckFoldername(varOrdner(i)) Then
        strOrdner = strOrdner & Application.PathSeparator & varOrdner(i)
        If Dir(strOrdner, vbDirectory) = "" Then
             VBA.MkDir Path:=strOrdner
        End If
    Else
        MsgBox "Der Unter-Ordner """ & varOrdner(i) _
            & """ enthält unzulässige Zeichen ( :  /  \  |  *  ?  <  > oder "" )", _
            vbOKOnly, "Prüfung Ordnername"
        Exit Sub
    End If
Next i
strFilename = ActiveSheet.Range("C77").Text & ".xlsm"
If fncheckFilename(strFilename, strZeichen) Then
    If Dir(strOrdner & "\" & strFilename) <> "" Then
        If MsgBox("vorhandene Datei: " & strFilename & vbLf & "im Ordner: " & strOrdner & _

vbLf _
& „überschreiben?“, vbQuestion + vbOKCancel, „Datei speichern“) = vbOK Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strOrdner & „“ & strFilename, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.DisplayAlerts = True
End If
Else
ActiveWorkbook.SaveAs Filename:=strOrdner & „“ & strOrdner
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End If
Else
MsgBox „Der Dateiname „““ & strFilename _
& „“" enthält unzulässige Zeichen " & strZeichen, _
vbOKOnly, „Prüfung Dateiname“
End If

End Sub

Function fncheckFilename(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", „/“, „“, „|“, „“"", „?“, „*“, „<“, „>“)
fncheckFilename = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & " " & arrZeichen(i)
End If
Next
If strZ <> „“ Then fncheckFilename = False
End Function

Function fncheckFoldername(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", „/“, „“, „|“, „“"", „?“, „*“, „<“, „>“)
fncheckFoldername = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & " " & arrZeichen(i)
End If
Next
If strZ <> „“ Then fncheckFoldername = False
End Function

Leider verweist Excel immer auf einen Syntaxfehler

Ich habe leider keine Ahnung was der Fehler ist und wäre über einen Wink mit dem Zaumpfahl der dankbar.

Gruß TB

Am Ende der Zeile, die sich über der blau markierten Zeile befindet, scheint ein Komma nebst Unterstrich zu fehlen.

Moin,

        If MsgBox("vorhandene Datei: " & strFilename & vbLf & "im Ordner: " & strOrdner & _

vbLf _
& „überschreiben?“, vbQuestion + vbOKCancel, „Datei speichern“) = vbOK Then

die Leerzeile vor dem vbLf_ ist übrig.

In

ActiveWorkbook.SaveAs Filename:=strOrdner & „“ & strOrdner
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

fehlt ein Komma nebst Unterstrich nach strOrdner.

Gruß
Ralf

ps: Bin gerade vom Laptop, auf dem ich keine Bilder sehe, zum Desktop gewechselt - die Leerzeile ist nur in der Kopie des Codes.

Wenn man eine Fehlermeldung bekommt und nicht erkennen kann, warum das falsch sein soll, schaut man in die Zeile darüber, in den Absatz darüber, in die Klammer davor, in die Definitionen ganz oben.

Compiler sind halt nicht annähernd so schlau wie die Werbung behauptet.

1 Like

Sehr schön, vielen Dank, das hat diesen Fehler behoben und der Ordner wird entsprechend der vorgegeben Zelle angelegt. :grinning:

Was mich leider scheinbar zum nächsten Problem bringt (entschuldigt bitte meine Unwissenheit).

Jetzt bekomme ich die folgende Meldung:

Wenn vielleicht nochmal jemand so freundlich wäre…?!

Wenn ich aus dem Teil
ActiveWorkbook.SaveAs Filename:=strOrdner & „“ & strOrdner, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

das hier mache
ActiveWorkbook.SaveAs Filename:=strOrdner, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

läuft das Macro zwar durch, legt aber die Datei nicht IN sondern quasi NEBEN den Ordner… :face_with_raised_eyebrow:

Du verwendest da zweimal strOrdner, aber scheinst keinen Dateinamen anzugeben.

Gruß,
Steve

Ich weiß nicht was ich tue :sweat_smile:

Aber es wird nun definitiv der korrekte Ordner angelegt und auf die Datei korrekt (gleiche Bezeichnung wie der Ordner) angelegt. Leider wird die Datei dabei eben wie gesagt nicht IN sonder NEBEN den Ordner gelegt. :thinking:

Hier nochmal der komplette verwendete code:

Sub speichern()

’ speichern Makro

’ Tastenkombination: Strg+p

’ speichert die datei
Dim strFilename As String
Dim strOrdner As String, varOrdner, i As Integer, strZeichen As String

strOrdner = "C:\Users\tages\Documents\Test Makro\" & ActiveSheet.Range("D1") & ActiveSheet.Range("D2") & ActiveSheet.Range("D3") & ActiveSheet.Range("D8").Text
varOrdner = Split(strOrdner, "\")

strOrdner = varOrdner(0)
For i = 1 To UBound(varOrdner)
    If fncheckFoldername(varOrdner(i)) Then
        strOrdner = strOrdner & Application.PathSeparator & varOrdner(i)
        If Dir(strOrdner, vbDirectory) = "" Then
             VBA.MkDir Path:=strOrdner
        End If
    Else
        MsgBox "Der Unter-Ordner """ & varOrdner(i) _
            & """ enthält unzulässige Zeichen ( :  /  \  |  *  ?  <  > oder "" )", _
            vbOKOnly, "Prüfung Ordnername"
        Exit Sub
    End If
Next i
strFilename = ActiveSheet.Range("C77").Text & ".xlsm"
If fncheckFilename(strFilename, strZeichen) Then
    If Dir(strOrdner & "\" & strFilename) <> "" Then
        If MsgBox("vorhandene Datei: " & strFilename & vbLf & "im Ordner: " & strOrdner & _

vbLf _
& „überschreiben?“, vbQuestion + vbOKCancel, „Datei speichern“) = vbOK Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strOrdner & „“ & strFilename, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.DisplayAlerts = True
End If
Else
ActiveWorkbook.SaveAs Filename:=strOrdner, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End If
Else
MsgBox „Der Dateiname „““ & strFilename _
& „“" enthält unzulässige Zeichen " & strZeichen, _
vbOKOnly, „Prüfung Dateiname“
End If

End Sub

Function fncheckFilename(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", „/“, „“, „|“, „“"", „?“, „*“, „<“, „>“)
fncheckFilename = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & " " & arrZeichen(i)
End If
Next
If strZ <> „“ Then fncheckFilename = False
End Function

Function fncheckFoldername(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", „/“, „“, „|“, „“"", „?“, „*“, „<“, „>“)
fncheckFoldername = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & " " & arrZeichen(i)
End If
Next
If strZ <> „“ Then fncheckFoldername = False
End Function

Wenn man nicht weiß, was passiert, erzeugt man sich zum Debuggen zusätzliche Ausgaben. Zwischenwerte, Strings, Zustände, Stationen im Programmablauf.
Lass dir halt mal den String anzeigen, den deine Funktion da tatsächlich bekommt.

Du weißt offensichtlich tatsächlich nicht, was du da eigentlich machst. Magst du dich nicht mal irgendwann mit den Grundzügen des Programmierens beschäftigen? Das sind doch die allerersten Basics.

Es war ja auch kein Scherz…
Ich nutze nur codes die ich im Internet finde und die ich an meine Bedürfnisse kann.
Wenn ich damit nicht weiter komme, greife ich auf die Hilfe von Leuten zurück die eben wissen was sie tun.
Und nein, ich kann mich, aus einer vielzahl von Gründen, aktuell nicht weiter mit der Materie beschäftigen. Mal ganhz davon abgesehen das das Programieren einfach nicht jedermanns Sache ist. Dennoch habe ich mit meinen begrenzten Mitteln und der freundlichen Hilfe der Expertinnen und Experten hier, bisher das erreichen können was ich wollte/musste und hoffe auch in diesem Fall auf die Unterstützung der versierten Forenmitglieder.

In diesem Sinne, vielen Dank für die bisherigen Antworten und im Voraus.

Gruß TB

Ich habe das Problem Mittlerweile gelöst bekommen.
Vielen Dank nochmals für die kompetente Hilfe.