Wie kann ich text-Dateien mit speziellen Zeichen im Dateinamen
Demonstration meines Problems
- Öffnen Sie eine neue Excel-Arbeitsmappe und speichern Sie diese Symbole 設計師協會 zu Zelle [A1]
- fügen Sie den folgenden VBA-code irgendwo in den editor (Alt+F11)
- ausführen Zeile pro Zeile (F8)
Sub test() strCRLF = StrConv(vbCrLf, vbUnicode) strSpecialchars = StrConv(Cells(1, 1), vbUnicode) strFilename = "c:\test.txt" Open strFilename For Output As #1 Print #1, strSpecialchars & strCRLF; Close #1 End Sub
Erhalten Sie eine Textdatei, die enthält die chinesischen Zeichen aus [A1]. Dies Beweise, dass die VBA in der Lage ist, um auch unicode-Zeichen verarbeiten, wenn Sie wissen, der trick mit dem hinzufügen StrConv(vbCrLf, vbUnicode)
Versuchen Sie nun das gleiche für strFilename = "C:\" & strSpecialchars & ".txt"
. Erhalten Sie eine Fehlermeldung, die kann man nicht erstellen Sie eine Datei mit diesem Dateinamen. Natürlich können Sie nicht den selben trick benutzen, hinzufügen einer neuen Zeile, da es ein mit dem Namen.
Wie kann ich text-Dateien mit Sonderzeichen in Ihrem Dateinamen mit VBA?
Gibt es ein work-around, oder mache ich etwas falsch?
Hinweis
- Ich bin mit Windows 7 x64. Ich bin in der Lage, zum erstellen von Textdateien mit Sonderzeichen manuell
- Fand ich eine zweite Methode mit "FileSystemObject". Aber ich hoffe, ich konnte es vermeiden, einen Verweis zu den VB-Skript run-time Bibliothek
InformationsquelleAutor nixda | 2013-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abgerufene Wert aus der Zelle ist bereits in Unicode.
StrConv(vbUnicode)
gibt Sie "double unicode", die ist gebrochen, weil es ging durch eine Konvertierung mit der aktuellen sustem codepage.Dann die
Print
Befehl wandelt es wieder auf "unicode", wieder mit der aktuellen system-codepage. Tun Sie das nicht. Sie sind sich nicht speichern unicode -, Sie sparen ungültige etwas, das kann nur stichhaltig erscheinen auf Ihrem jeweiligen computer unter Ihre aktuellen Einstellungen.Wenn Sie möchten, um die Ausgabe von Unicode-Daten (das heißt, vermeiden Sie die Standard-VB-Mechanismus der auto-converting-Ausgabe-text von Unicode in ANSI), haben Sie mehrere Möglichkeiten.
Die einfachste ist die Verwendung
FileSystemObject
ohne zu versuchen, zu erfinden, etwas über unicode-Konvertierungen:Hinweis: der Letzte parameter, der steuert, Unicode.
Wenn Sie das nicht wollen, können Sie erklären
CreateFileW
undWriteFile
Funktionen:CreateObject("ADODB.Stream")
, die für mich gearbeitet hat.InformationsquelleAutor GSerg
Sind Sie auf der richtigen Spur mit dem "FileSystemObject". Wie Morbo bereits erwähnt können Sie sich spät binden diese, so dass kein Verweis gesetzt ist. Das BFS hat eine CreateTextFile-Funktion, die eingestellt werden können, in unicode, so dass die Zeichen erscheinen als '??????' in VBA wird aber korrekt schreiben an den Dateinamen an. Hinweis: der zweite parameter der CreateTextFile-Funktion gibt eine unicode-Zeichenfolge für den Dateinamen. Das folgende wird der trick für Sie:
oFSO.CreateTextFile(strFilename, True)
. Oder zumindest ein zweites Komma?Ja, du hast Recht, es sollte einen zweiten Komma. Eine interessante qn also +1
InformationsquelleAutor CuberChase