はじめに
利用シーンはあまり無いとおもいますが、[VBA]UTF-8ファイルを出力する でUTF-8出力に対応したので、BOMの制御にも対応してみました。
ポイントは、テキストデータをバイナリに変換してBOM(先頭3バイト)を取り除くだけです。
準備
Visual Basic Editor のメニューから、[ツール]→[参照設定]で、リストから参照設定する。
・Microsoft ActiveX Data Objects x.x Library (最新バージョンのみでOK)
実装
Public Sub SaveFile(ByVal filename As String, ByVal text As String, _
Optional ByVal enc As String = "UTF-8", Optional ByVal bom As Boolean = True)
'BOM対応するために、バイナリにに変換
Dim Stream: Set Stream = New ADODB.Stream
Stream.Type = adTypeText
Stream.Charset = enc
Stream.Open
Stream.WriteText text
Stream.Position = 0
Stream.Type = adTypeBinary
'BOMなしにする
If InStr(enc, "UTF") <> 0 And bom = False Then Stream.Position = 3
Dim buf: buf = Stream.Read
Stream.Close
'ファイル出力
Dim output: Set output = New ADODB.Stream
output.Type = adTypeBinary
output.Open
output.Write buf
output.SaveToFile filename, adSaveCreateOverWrite
output.Close
End Sub