LibreOfficeでVBAでUTF-8のファイルを書き出したかった話
私は、自宅のパソコンで LibreOffice を使用しています。Microsoft のオフィスソフトを本来は使いたいのですが、私は購入していません。私は自宅では無料で使えるLibreOfficeを利用しています。
以前、VBAで、ファイルをUTF-8で書き出す方法として、以下の記事*を書きました。
上記記事の方法だと、私がこの記事を書いているパソコンにはExcelが入っていないので今 確かめられませんが、たぶん、UTF-8のBOMありで書き出されるのではないかと、思います。
BOMなしで書き込む方法をChatGPT(またはCopilot)に聞いてみようと思いました。
その前に、以下のコードを、私のパソコンのLibreOffice Calc で実行してみることにしました。
Sub a()
writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub
Private Sub writeToFile(htmlTxt)
currentDir = ActiveWorkbook.Path
targetFilePath = currentDir + "\" + "test.html"
Open targetFilePath For Output As #1
 Print #1, htmlTxt
Close #1  
End Sub
このコードが正常に動作する前提で、UTF-8のBOMなしで書いてもらうようにChatGPTに依頼しようと思っていました。
しかし、このコードを私のパソコンで実行すると、以下のエラーが出てしまうことが分かりました。

まずはこのエラーが出ないようにする必要が、ありました。
そこで、Copilotに、LibreOfficeでUTF-8で書き込めるようにコードを修正するよう頼みました。Copilotは以下のコードを書いてくれました。
Sub a()
writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub
Private Sub writeToFile(htmlTxt)
Dim oDoc As Object
Dim currentDir As String
Dim targetFilePath As String
Dim bytes() As Byte
oDoc = ThisComponent
currentDir = oDoc.URL
currentDir = Left(currentDir, InStrRev(currentDir, "/") - 1)
targetFilePath = currentDir + "/" + "test.html"
bytes = StrConv(htmlTxt, vbFromUnicode)
Open targetFilePath For Binary As #1
 Put #1, , bytes
Close #1
End Sub
上記のコードは、私の環境では、エラーにはならないで実行できますが、UTF-8ではなくShift-JISで出力されます。UTF-8になるように Copilot に頼んで書き直してもらいました。しかし、書き直してもらったコードではエラーが出てしまって、うまくいきませんでした。
#まとめLibreOffice の VBA で UTF-8 でファイルに書き込むコードを生成AIに書いてもらおうと思いましたが、今回はうまくいきませんでした。VBAを本格的に使いたいなら、Excel を使ったほうがいいのかもしれません。それでも、無料で使えるのはLibreOffice の利点です。私はプライベートでは、VBAをほとんど使わないので、今後も LibreOffice を使用するつもりです。