2009-06-19 31 views
3

excel/vbaマクロのウィンドウボックスにフラットファイルとしてユニコード文字列を格納したい。マクロは通常の文字列をUnicode表現に変換し、ファイルに格納して後で取得する必要があります。vbaからフラットファイルへのUnicode文字列

答えて

2

「Microsoft Scripting Runtime」COMコンポーネント(scrrun.dll)への参照を追加します。

ファイルを作成/読み書きするためのすべてのクラス(具体的にはFileSystemObject/TextStream)があります。

5

前述のとおり、Microsoft Scripting Runtime(scrrun.dll)を使用することができます。私はいくつかの例を以下に掲載しました。また、ネイティブのファイルIO機能が好きな人もいます。ここでは大規模な(そしてかなり包括的なスレッド)スレッドがあります:http://www.xtremevbtalk.com/showthread.php?t=123814

しかしUnicodeは、それはおそらくTextstreamsを使用して少なくとも苦痛だ:)

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ポストクオリティ –

1

私が理解できた最善の解決策は、文字列を読み込まれるファイルのためのバイト配列とバイナリファイルへの各バイトを書き込む

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 

にバイナリモードでファイルを開き、バイト配列に各バイトを読み取り、次いで、文字列に変換し、それを読み取ります。

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