VABではStreamWriterクラスは使用できないのでしょうか?

タグの編集
投稿者 ヤマダ  (社会人) 投稿日時 2023/7/10 10:16:26
現在、Excelシートの情報をCSV出力するマクロを組んでいます。
今まではVB..NETを触っていたので、.NETで使っていたコードを流用しようと思い、以下の処理を加えようとしたところ、構文エラーとなりました。

Public Function Csv_open(ByVal iOmode As Boolean, _
                                     ByRef oSt As System.IO.StreamWriter, _
                                      ByVal iFnm As String) As Short
    On Error GoTo ErrorHandler
            oSt = New System.IO.StreamWriter(iFnm, iOmode,   System.Text.Encoding.GetEncoding("shift-jis"))           
            Csv_open = 0
            
  ErrorHandler:
            Csv_open = -1

End Function

ネットでVBAでStreamWriterクラスを使った記事がなかったので、VBAではStreamWriterクラスは使用できないのかと思い質問いたしまた。

もし、使えるのであれば修正箇所を教えていただきたいです。
よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/7/10 11:15:27
StreamWriter は .NET や .NET Framework のクラスです。
VBA などから使える ActiveX オブジェクトのクラスではありません。

Excel VBA からの CSV 出力であれば、こういった方法を使います。

(1) ワークシートの SaveAs メソッドで CSV 形式を指定する
https://www.officepro.jp/excelvba/book_new/index9.html

(2) FreeFile 関数 / Open ステートメント/Close ステートメント/ Print # ステートメントを使う
※Shift_JIS 前提。
https://excel-ubara.com/excelvba1/EXCELVBA418.html

(3) TextStream オブジェクト (Microsoft Scripting Runtime) を使う
※Shift_JIS もしくは UTF-16 の 2 種類。
https://vbabeginner.net/howto-use-filesystemobject-textstream/

(4) Stream オブジェクト (Microsoft ActiveX Data Objects Library) を使う
※Shift_JIS 、UTF-8、UTF-16 など、多種多様な文字コードに対応
https://dailyrecords.blog/archives/26027
https://excel-ubara.com/excelvba5/EXCEL220.html
投稿者 ヤマダ  (社会人) 投稿日時 2023/7/10 11:21:51
魔界の仮面弁士 さんご回答ありがとうございます。
そうだったのですね、勉強になりました。
また、参考ページのリンクも大変助かります。
ありがとうございました。