ライブラリを読み込む2つの方法

プログラミング

ライブラリとは

 VBAでは、標準以外の機能を外部に設けて後から機能追加できるような機能があります。
 (これは他のプログラミング言語でも用いられる手法です。)
 この外部機能は、ライブラリと呼ばれる関数群になります。

 VBAでは様々なライブラリが用意されています。
 現在使っているExcelで利用可能なライブラリは、
 VBE「ツール」>「参照設定」と辿るとダイアログが出て一覧を確認できます。

ライブラリを使えるようにする

 ライブラリは有効可能にしなければ使うことができません。
 有効にするには2つの方法があります。
 一つは、先ほどの「参照設定」で出たダイアログで該当するライブラリにチェックを入れる方法。
 もう一つは、VBAのプログラムコードで記述して有効にする方法です。

 「参照設定」でチェックを入れる方法では、Excelファイルを他に持ち出したりすると参照が出来ずにエラーが発生する場合があります。
 では、プログラムで記述するのが万能かと言いますと、それが出来ないライブラリもあるようなので2つの方法を覚えておいた方が良いでしょう。

「参照設定」ダイアログで有効にする方法

 今回は、UTF8のテキストファイルを読み込む際に使用する“Microsoft ActiveX Data Objects Library”を題材にして解説します。
 このライブラリはExcelでデータベースを扱うためのライブラリになります。
 
 では、実際の設定方法です。
 VBEの「ツール」から「参照設定」を選択して、ダイアログを表示させます。
 (Excelの画面ではなく、VBEの画面から操作します。)
 一覧の下の方に行くと、「Microsoft ActiveX Data Objects 6.1 Library」があると思いますのでチェックを入れます。

 ※バージョン2.8などの 2.x は今回のADODB.Streamには不適切です。

 これでライブラリが使える準備が整いました。
 UTF8のテキストファイルを開くプログラムを書いてみます。

プログラムコード

Sub ReadUTF8_New()
    Dim filename
    filename = Application.GetOpenFilename(FileFilter:="TEXTファイル(*.txt),*.txt", _
                                                Title:="テキストファイルの選択")
    If filename = False Then Exit Sub
    
    '事前にライブラリにチェックを入れておく方法
    'Microsoft ActiveX Data Objects 6.1 Library
    Dim myADO As New ADODB.Stream
    
    Dim i As Long
    i = 1
    With myADO
        .Type = adTypeText
        .Charset = "UTF-8"
        .Open
        .LoadFromFile (filename)
        
        Do Until .EOS
            Cells(i, "A") = .ReadText(adReadLine)
            i = i + 1
        Loop
        
        .Close
    End With
End Sub

プログラムコード解説

 「参照設定」を使う場合は、以下のようにオブジェクトを生成します。

 Dim myADO As New ADODB.Stream

 以下のように2行に分けて書いても構いません。

 Dim myADO As ADODB.Stream
 Set myADO = new ADODB.Stream
 

 オブジェクトに代入する時は Set を付けますので忘れないようにしましょう。

 ADODB.Streamオブジェクトを生成したら、プロパティやメソッドを追加していきます。
 Typeでテキスト(adTypeText)を指定。
 Charsetで “UTF-8″を指定。
 Open、LoadFromFileでファイルを開きます。
 
 その後はファイルの終端まで、一行づつ読み込んでセルにコピーします。
 最後にファイルを閉じて終了です。
 

「参照設定」を使わない方法

 参照設定を使わない場合は、CreateObject を使います。
 CreateObject()の引数は、文字列を指定するので””で囲みます。
 代入する変数は、Object型を使います。
 また、プロパティなどの定数は、参照できないため、MSDNなどで調べておく必要があります。

プログラムコード

Sub ReadUTF8_Create()
    Dim filename
    filename = Application.GetOpenFilename(FileFilter:="TEXTファイル(*.txt),*.txt", _
                                                Title:="テキストファイルの選択")
    If filename = False Then Exit Sub
    
    'プログラムでライブラリを読み込む方法
    Dim myADO As Object
    Set myADO = CreateObject("ADODB.Stream")
    
    Dim i As Long
    i = 1
    With myADO
        .Type = 2 'adTypeText
        .Charset = "UTF-8"
        .Open
        .LoadFromFile (filename)
        
        Do While Not (.EOS)
            Cells(i, "A") = .ReadText(-2) 'adReadLine
            i = i + 1
        Loop
        
        .Close
    End With
End Sub

プログラムコード解説

 「参照設定」を使わない場合は、以下のように宣言・生成します。
 Dim myADO As Object
 Set myADO = CreateObject(“ADODB.Stream”)

 宣言はObject型を使い、CreateObject()で生成します。
 CreateObject()の引数はライブラリ名を文字列で指定します。
 オブジェクトの代入は Setを付けますので忘れないで下さい。

 また、プロパティなどの定数は、参照設定がないのでVBEが知ることはできませんので、MSDNなどで調べておいて直接数値で指定しています。
 上の例では、定数が以下のように定義されていますので、直接数値を代入しています。
 adTypeText = 2
 adReadLine = -2

 
 プログラム動作に関しては先の例と同じなので省略します。

まとめ

 今回は、ライブラリの使用方法について解説しました。

 「参照設定」を使わない場合は、定数などが使えなくなるためWebサイトなどのサンプルコードが上手く動かない場合があるかもしれません。
 「変数が定義されていません」などのエラーが出た場合、混乱してしまうかもしれません。
 (筆者がそうでした,,,)
 初心者がつまづきそうな点をまとめておきます。
 
 ・ADODB.Streamの参照設定は、「Microsoft ActiveX Data Objects 6.1 Library」を使う。(2.xではない。)
 ・CreateObject()の引数は文字列。受ける変数はObject型
 ・定数が使えるのは、「参照設定」を使うときのみ。

 

 ライブラリを使えるようにすることを「バインディング」と呼ぶことがあります。
 参照設定で使えるようにすることを、あらかじめ設定する事から事前バインディング
 プログラム上で使えるようにすることを、後から設定する事から遅延バインディング実行時バインディングと呼ぶことがあります。
 用語として覚えておきましょう。

タイトルとURLをコピーしました