Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1052to1056
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige