ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBA ADODB.Stream

■ADODB.Streamのバインディング方法

'<CreateObjects 関数を使用する場合>
Dim st As Object
Set st = CreateObject(“ADODB.Stream”)

'<参照設定を行う場合>
Dim st As ADODB.Stream
Set st = New ADODB.Stream

※参照設定の場合
Excel2003 以前では、Microsoft ActiveX Data Objects 2.8 Library を選択します。
Excel2007 以降では、Microsoft ActiveX Data Objects バージョン番号 Library を選択

■ADODB.Streamの主なメソッドとプロパティ
※参考URL:https://excelwork.info/excel/adodbstream/

メソッド 説明
Open Stream オブジェクト を開く。
Close Stream オブジェクト を閉じる。
LoadFromFile 指定したファイルの内容を Stream に読み込む。
SaveToFile Stream オブジェクトの内容を指定したファイルに保存する。
SetEOS Stream オブジェクト内の位置をを末尾に設定する。
Read/ReadText Stream オブジェクトから指定したバイト数または文字数のデータを読み取る。
Write / WriteText Stream オブジェクトにバイナリデータまたはテキストデータを書き込む。
プロパティ 説明
Type Stream オブジェクト内のデータ型(テキスト or バイナリ)を設定する。
Charset ファイルの文字コードを指定する。
Position Stream オブジェクト内の現在の位置を取得、または設定する。
EOS Stream オブジェクト内の現在の位置が末尾かどうかを確認する。

■サンプルコード①

Sub Sample_ADOStream_Load()
 
    '【参照設定】Microsoft ActiveX Data Objects 6.1 Library
    
    Dim st As ADODB.Stream
    Dim myPath As String
    Dim myStr As String
    
    myPath = ThisWorkbook.path & "\test01.csv"
    Set st = New ADODB.Stream
    
    With st
        .Open                   'Stream を開く
        .Type = adTypeText      'テキスト形式
        .Charset = "UTF-8"      '文字コードの指定
        .LoadFromFile myPath    'ファイルの内容を読み込む
        myStr = .ReadText       '読み込んだ内容を取得
        .Close                  'Stream を閉じる
    End With
    
    MsgBox myStr
 
End Sub

■サンプルコード②

Sub Sample_ADOStream_Save1()
 
    '【参照設定】Microsoft ActiveX Data Objects 6.1 Library
    
    Dim st As ADODB.Stream
    Dim myPath As String
    Dim myStrLine As String
    Dim myRng As Range
    Dim i As Long
    Dim j As Long
    
    myPath = ThisWorkbook.path & "\test02.csv"
    Set st = New ADODB.Stream
    
    st.Open                 'Stream を開く
    st.Type = adTypeText    'テキスト形式
    st.Charset = "UTF-8"    '文字コードの指定
    
    With Worksheets("Sheet1")
    
        Set myRng = .Range("A1").CurrentRegion
    
        For i = 1 To myRng.Rows.Count
            myStrLine = ""
            For j = 1 To myRng.Columns.Count
                If j = 1 Then
                    myStrLine = .Cells(i, j)
                Else
                    myStrLine = myStrLine & "," & .Cells(i, j)
                End If
            Next j
            st.WriteText myStrLine, adWriteLine '内容を書き込む
        Next i
    
    End With
    
    st.SaveToFile myPath, adSaveCreateOverWrite 'ファイルに保存
    st.Close                                    'Stream を閉じる
    
    Set st = Nothing
    Set myRng = Nothing
 
End Sub