VBA技術解説
事前バインディングと遅延バインディング(実行時バインディング)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-06-10 最終更新日:2019-12-21

事前バインディングと遅延バインディング(実行時バインディング)


マクロVBAでActiveXオブジェクトを操作する場合のVBA記述方法が2通りあります。
オブジェクトがオブジェクト変数に代入されるとき、事前バインディングと遅延バインディング(実行時バインディング)の2通りです。

バインディングとは

バインディングはbindingで、縛るとか束ねると言う意味の英単語です。
オブジェクトがオブジェクト変数に代入されるときにバインディングと呼ばれる処理を実行します。
記述方法の違いにより、事前バインディングと遅延バインディング(実行時バインディングとも呼びます)の2通りの方法があります。

事前バインディング

特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前(コンパイル時に)バインディングされます。
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、
コンパイラによってメモリの割り当てとその他の最適化が実行されます。
ただし、外部オブジェクトの場合は参照設定が必要になります。

遅延バインディング(実行時バインディング)

オブジェクトが Object 型として宣言された変数に代入される場合は、遅延(実行時)にバインディングされます。
この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、
事前バインディングされたオブジェクトの利点をほとんど持ちません。

実装(VBA記述)の違い

遅延バインディング

CreateObject関数を使用します。
・CreateObject関数の構文 ・CreateObjectの解説 ・CreateObject関数の使用例 ・GetObject関数

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")


事前バインディング

「ツール」→「参照設定」で
「Microsoft Scripting Runtime」にチェックを付ける。

Dim objFSO As New FileSystemObject
または、
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject


一言で言えば、
変数宣言の型が、Objectが遅延バインディング、特定のオブジェクト型が事前バインディング

事前バインディングの利点

可能な限り、事前バインディングされたオブジェクトを使用してください。
これによって、コンパイラは、アプリケーションをより効率的にする重要な最適化を実行できます。
事前バインディングされたオブジェクトは遅延バインディングされたオブジェクトよりも処理が高速です。
使用されているオブジェクトの種類が明確になるため、コードがより読みやすくなり、保守も簡単になります。
その他の利点として、自動コード補完機能が有効になり、プロパティ・メソッドの一覧を見る事が出来ます。

遅延バインディングの場合

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExist(strDir) Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

上のコードには、スペルミスがあります。

探すのは困難ですね。

実行時には、

マクロ VBA サンプル画像

マクロ VBA サンプル画像


事前バインディングの場合

Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject
If Not objFSO.FolderExist(strDir) Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

実行時には、

マクロ VBA サンプル画像

もとより、事前バインディングの場合は、

マクロ VBA サンプル画像

このように入力候補がでるので、スペルミスはほとんどなくなります。

よほど特殊な事情が無い限り、事前バインディンクするようにして下さい。

参照設定の方法
VBEの画面で、「ツール」→「参照設定」
ここで必要なオブジェクトにチェックを付けます。

非常に多くのライブラリがあります。
正式な名称を知らずに、その場で探すことは困難です。
事前に正式なライブラリ名称を調べてから設定して下さい。




同じテーマ「マクロVBA技術解説」の記事

事前バインディングと遅延バインディング(実行時バインディング)
Dictionary(ディクショナリー)連想配列の使い方について

・Dictionaryを使って重複を除く ・Dictionaryの使い方その2 ・Dictionaryの使い方その3 ・Dictionaryの使い方サンプル ・サイト内のDictionary関連記事
Dictionary(ディクショナリー)のパフォーマンスについて
・Dictionaryの検証に使うシート ・ユニーク化(重複削除)の方法について ・Dictionaryでユニーク化1 ・Dictionaryでユニーク化2 ・Dictionaryでユニーク化3 ・Dictionaryでユニーク化4 ・最初のVBAはなぜ遅かったのか ・Dictionaryを使わない方法 ・サイト内の関連ページ
VBAでのInternetExplorer自動操作
・VBEの参照設定 ・InternetExplorerの開始と終了 ・HTMLオブジェクトの操作 ・VBAでのInternetExplorer操作例 ・WEBクローリング&スクレイピングのサイト内参考ページ
VBAでのSQLの基礎(SQL:Structured Query Language)
・SQL文 ・SELECT文 ・SQLの学習について ・実践例
VBAで正規表現を利用する(RegExp)
・メタ文字 ・正規表現 ・正規表現RegExpの使い方 ・RegExpオブジェクト ・RegExpの使用例 ・RegExp関連のオブジェクト ・Execute(Matches,Match,SubMatches)の使用例 ・Replaceの使用例 ・先読み:肯定先読み、否定先読み ・正規表現の実践例
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
・バインディング方法 ・CDOを使ったメール送信のサンプルVBA ・CDOのプロパティ ・CDOのメソッド ・CDO.Configuration.Fields.Item ・CDO.Fields.Item ・ConstantやEnumについて
VBAでのOutlook自動操作
・Outlookインスタンスの生成と、ログオン、全て送受信 ・Outlookを起動して指定フォルダーを表示 ・フォルダーの取得 ・メールの一覧を取得 ・メールを送信 ・メールを返信 ・最後に
ADO(ActiveX Data Objects)の使い方の要点
・データベースの種類 ・SQL(SQL:Structured Query Language) ・ADOを使う準備 ・ADOでのDB接続方法 ・ADODB.Recordsetの取得方法 ・ADODBのレコードセットの扱い方 ・ADODBのトランザクション処理 ・ADODB.Commandの使い方 ・VBA100本ノックでの実践例 ・最後に注意点等
特殊フォルダの取得(WScript.Shell,SpecialFolders)
・WScript.Shell ・SpecialFolders プロパティ ・WshShellのSpecialFoldersのマクロVBA使用例
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclas…


新着記事NEW ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ