2009-06-19 5 views
3

Ich möchte eine Unicode-Zeichenfolge in einer flachen Datei auf einer Windows-Box von einem Excel/VBA-Makro speichern. Das Makro konvertiert die normale Zeichenfolge in Unicode-Darstellung, muss sie in einer Datei speichern und später abrufen.Unicode-Zeichenfolge in Flat-Datei von VBA

Antwort

2

Fügen Sie einen Verweis auf die COM-Komponente "Microsoft Scripting Runtime" (scrrun.dll) hinzu.

Es hat alle Klassen (insbesondere FileSystemObject/TextStream) zum Erstellen/Lesen/Schreiben von Dateien.

5

Wie bereits erwähnt, können Sie die Microsoft Scripting Runtime (scrrun.dll) verwenden. Ich habe unten einige Beispiele gepostet. Manche Leute mögen auch die nativen Datei-IO-Funktionen. Es gibt ein umfangreiches (und ziemlich umfassend Gewinde) Gewinde hier: http://www.xtremevbtalk.com/showthread.php?t=123814

jedoch für Unicode-Dateien, es ist wahrscheinlich das am wenigsten schmerzhaft Textstreams verwenden :)

Public Sub StringToTextFile(ByVal path As String, ByVal value As String) 
    'Requires reference to scrrun.dll 
    Dim fso As Scripting.FileSystemObject 
    Dim ts As Scripting.TextStream 
    Set fso = New Scripting.FileSystemObject 
    Set ts = fso.CreateTextFile(path, False, True) 
    ts.Write value 
    ts.Close 
End Sub 

Public Sub LazyMansWay(ByVal path As String, ByVal value As String) 
    'Reference counting will cause the objects to be destroyed. The termination 
    'events of the classes will cause the connections to be closed. 
    CreateObject("Scripting.FileSystemObject").CreateTextFile(path, False, True).Write value 
End Sub 
+0

+1 hd nachqualität –

1

Die beste Lösung Ich stellt dar, könnte die Zeichenfolge gelesen wird, in auf ein Byte-Array und jedes Byte in eine Binärdatei durch Öffnen der Datei im Binärmodus es schreiben

Private Function WriteBinaryFile(ByRef szData As String) 
    Dim bytData() As Byte 
    Dim lCount As Long 

    bytData = szData 
    Open PwdFileName For Binary As #1 
     For lCount = LBound(bytData) To UBound(bytData) 
      Put #1, , bytData(lCount) 
     Next lCount 
    Close #1 
End Function 

Lesen zurück und jedes Byte in ein Byte-Array zu lesen und es dann in einen String umgewandelt wird.

Sub ReadBinaryFile(ByRef gszData As String) 
Dim aryBytes() As Byte 
Dim bytInput As Byte 
Dim intFileNumber 
Dim intFilePos 

intFileNumber = FreeFile 

Open PwdFileName For Binary As #intFileNumber 
intFilePos = 1 

Do 
    Get #intFileNumber, intFilePos, bytInput 
    If EOF(intFileNumber) = True Then Exit Do 
    ReDim Preserve aryBytes(intFilePos - 1) 
    aryBytes(UBound(aryBytes)) = bytInput 
    intFilePos = intFilePos + 1 
Loop While EOF(intFileNumber) = False 
Close #intFileNumber 

gszData = aryBytes 
End Sub