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
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.
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
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
+1 hd nachqualität –