Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: aus String alle Sonderzeichen löschen

aus String alle Sonderzeichen löschen
02.03.2009 14:10:52
Joachim
Hallo,
ich möchte per Makro ein Excelfile abspeichern. dazu hole ich mir Daten aus einer Zelle heraus (A1):
Dateiname = Sheets("Daten").Range("A1")
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
das funktioniert soweit. Das Problem ist nur, sobald sich im Namen der Zelle A1 mit ein Sonderzeichen befindet, kann die Datei nachher unter diesem Namen nicht abgespeichert werden. Excel mag bei dateinamen wohl keine Sonderzeichen.
Wie kann ich den vorher, vor dem Speichern, alle Sonderzeichen entfernen ?
Danke mal
Joachim
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aus String alle Sonderzeichen löschen
02.03.2009 14:57:45
D.Saster
Hallo,

Excel mag bei dateinamen wohl keine Sonderzeichen


Windows mag bei dateinamen keine Sonderzeichen.
Gruß
Dierk

AW: aus String alle Sonderzeichen löschen
02.03.2009 15:19:47
Jürgen
Hallo Joachim,
welche Zeichen Windows in Dateinamen nicht mag, zeigt es Dir z.B., wenn Du versuchst, im Explorer eine Datei umzubenennen und dabei z.B. einen Doppelpunkt eingibst.
Als Lösung kannst Du entweder ungültige Dateinamen abfangen, d.h. die weitere Codeausführung unterbinden, z.B. so:
Dateiname = Sheets("Daten").Range("A1")
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
If Neuer_Dateiname like "*[\/:*?""|]*" Then
MSGBox "Ungültiger Dateiname!"
Else
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
end if
Oder Du ersetzt vorsorglich alle potentiell gefährlichen Zeichen mit replace(), z.B.
Neuer_Dateiname = Replace(Neuer_Dateiname, ":", "")
Herzlichen Gruß
Jürgen
Anzeige
AW: aus String alle Sonderzeichen löschen
02.03.2009 15:37:38
Joachim
Hi Jürgen,
erstmal Danke.
die erste Variante kann ich nicht nehmen, weil der Name , der im Tabellenblatt in A1 drin steht auch mal ein Sonderzeichen beinhalten kann. Dieser Eintrag ist für den User nicht als Dateiname deklariert und soll das ganze bei der Eingabe flexibel lassen.
Also der User soll beim Eingeben der Daten nicht gehindert werden, irgend welche Sonderzeichen einzugeben.
darum wollte ich die Sonderzeichen vor dem Abspeichern herausfischen.
Deine 2 Variente: was macht der Replace - Befehl mit meinem Dateinamen, wenn sich ein angegebenes Zeichen darin befindet ? Wenn sich bei mir so ein Dateiname ergibt (zB "Project: TEST"), dann passiert da nichts ausser dass ich wieder die Fehlermeldung beim abspeichern bekomme.
Gruss
Joachim
Anzeige
AW: aus String alle Sonderzeichen löschen
02.03.2009 16:16:16
Jürgen
Hallo Joachim,
zunächst noch zur ersten Variante eine Ergänzung, da sie noch einen gravierenden Denkfehler enthält: da "Neuer_Dateiname" ja den ganzen Pfad enthält, werden darin sicherlich auch ein ":" und "\" enthalten sein. Daher darf für die Prüfung nur der Dateiname herangezogen werden, z.B. so:
Dim FSO as object
Dateiname = Sheets("Daten").Range("A1")
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.getbasename(Neuer_Dateiname) like "*[\/:*?""|]*" Then
MSGBox "Ungültiger Dateiname!"
Else
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
end if
Wenn in A1 irgendetwas stehen kann, was im Idealfall einen ersten Anhaltspunkt für einen Dateinamen hergibt, dann wäre denkbar, erst den Zellinhalt zu prüfen und ihn nur dann als Vorschlagswert zu verwenden, wenn er geeignet ist, z.B.
Dateiname = Sheets("Daten").Range("A1")
If Dateiname like "*[\/:*?""|]*" Then
Neuer_Dateiname = Application.GetSaveAsFilename(fileFilter:="Excel-Arbeitsmappe, *.xls")
else
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
end if
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
Mit Replace ersetzt Du ein Zeichen bzw. eine Zeichenfolge durch eine andere. Das könnte z.B. so aussehen:
Dateiname = Sheets("Daten").Range("A1")
Dateiname = Replace(Dateiname, ":", "")
Dateiname = Replace(Dateiname, "\", "")
'usw
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
Für jedes unerwünschte Zeichen wäre also eine Zeile mit Replace fällig - es sei denn, man erstellt eine elegantere Lösung per Schleife, wie nachfolgend
Dim n as integer
Dim Verboten as String
Verboten = "\/:*?""|]*"
Dateiname = Sheets("Daten").Range("A1")
For n = 1 to len(Verboten)
Dateiname = Replace(Dateiname, mid(Verboten, n, 1), "")
next
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
Herzlichen Gruß
Jürgen
Anzeige
Danke für die ausführliche Erläuterung :-) oT
02.03.2009 19:35:49
Joachim
jetzt funktioniert perfekt.
Sorry, war mein Fehler, jetzt klapps, Danke oT
02.03.2009 15:57:05
Joachim
;
Anzeige
Anzeige

Infobox / Tutorial

Sonderzeichen aus Excel-Dateinamen entfernen


Schritt-für-Schritt-Anleitung

Um alle Sonderzeichen aus einem Excel-Dateinamen zu entfernen, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Anleitung:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (DeinWorkbookName) und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub SonderzeichenEntfernen()
       Dim Dateiname As String
       Dim Neuer_Dateiname As String
       Dim n As Integer
       Dim Verboten As String
    
       Verboten = "\/:*?""|"
       Dateiname = Sheets("Daten").Range("A1").Value
    
       For n = 1 To Len(Verboten)
           Dateiname = Replace(Dateiname, Mid(Verboten, n, 1), "")
       Next n
    
       Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=Dateiname, fileFilter:="Excel-Arbeitsmappe, *.xls")
    
       If Neuer_Dateiname = False Then Exit Sub
       ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
    End Sub
  4. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Drücke ALT + F8, wähle SonderzeichenEntfernen und klicke auf Ausführen.

Jetzt wird Dein Dateiname ohne unerwünschte Sonderzeichen gespeichert.


Häufige Fehler und Lösungen

  • Fehler: Ungültiger Dateiname

    • Ursache: Der Dateiname enthält weiterhin verbotene Zeichen.
    • Lösung: Stelle sicher, dass alle Zeichen, die in der Verboten-Liste definiert sind, entfernt werden.
  • Fehler: Makro funktioniert nicht

    • Ursache: Die Makros sind möglicherweise in Deiner Excel-Datei deaktiviert.
    • Lösung: Aktiviere die Makros in den Excel-Optionen.

Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du auch Excel-Formeln verwenden, um Sonderzeichen zu entfernen. Eine mögliche Formel könnte so aussehen:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, ":", ""), "\", ""), "/", "")

Diese Formel entfernt spezifische Zeichen. Du kannst sie erweitern, um mehrere Zeichen zu entfernen, indem Du weitere SUBSTITUTE-Funktionen hinzufügst.


Praktische Beispiele

  1. Beispiel mit VBA:

    • Wenn in Zelle A1 der Text Projekt: Test/2023 steht, wird das Makro den Dateinamen in Projekt Test2023 umwandeln.
  2. Beispiel mit Excel-Formel:

    • Bei der Verwendung der oben genannten Formel wird der Name Projekt: Test/2023 ebenfalls in Projekt Test2023 umgewandelt.

Tipps für Profis

  • Nutze die Replace-Funktion in VBA, um mehrere Sonderzeichen in einer Schleife zu entfernen. Dies macht Deinen Code flexibler.
  • Du kannst auch eine Fehlerprüfung einfügen, um sicherzustellen, dass der Benutzer eine gültige Eingabe macht, bevor das Speichern beginnt.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Sonderzeichen auf einmal entfernen? Du kannst mehrere Replace-Befehle in einer Schleife verwenden, wie im obigen VBA-Beispiel gezeigt.

2. Funktioniert dieser Ansatz auch in Excel Online? Leider unterstützt Excel Online keine VBA-Makros. Du musst die Desktop-Version von Excel verwenden.

3. Was passiert, wenn ich ein ungültiges Zeichen nicht entferne? Wenn ein ungültiges Zeichen im Dateinamen bleibt, wird Excel den Dateispeicherprozess abbrechen und eine Fehlermeldung anzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige