Excel VBAの参照設定

【環境】Windows 10 Pro 64bit、Excel for Office 365

Excel VBA (Microsoft Visual Basic for Applications)で参照設定を操作する方法について解説します

■参照設定を開く

Visual Basic Editorの[ツール] – [参照設定]で開きます

参照設定
参照設定
広告

参照設定でライブラリファイルにチェックを入れることで、そのライブラリを VBA から使用することができるようになります

参照設定のダイアログに関する説明は、MicrosoftのWEBサイトを見てくださいw

参照サイト:「[参照設定] ダイアログ ボックス | Microsoft Docs

■FileSystemObjectオブジェクトを使うには?

今回は、ファイル操作を行う時に、よく使用する FileSystemObject のメンバを参照できるようにしてみましょう!

・参照設定なし

参照を設定せずに、変数のタイプに FileSystemObject を指定しても入力補完機能(インテリセンス)は利用できません

参照なし
参照なし

・参照設定あり

– Microsoft Scripting Runtimeを追加

「Microsoft Scripting Runtime」を参照設定 に追加します

Scripting Runtime
Microsoft Scripting Runtime を参照する

すると インテリセンス が利用できるようになりますね!

インテリセンス利用
インテリセンスが利用できる

メンバを参照することもできるので、非常にコード生成が楽になります

メンバ参照のインテリセンス
メンバ参照のインテリセンス

■Scriptingライブラリとは

今、サンプル「 FileSystemObject_Sample1() 」では、 FileSystemObject を直接指定しています

もちろん、参照の場合は、パラメータのヘルプなどもこれだけで表示することはできるのですがー

パラメータのヘルプ
パラメータのヘルプ

FileSystemObject は、参照に追加したライブラリ 「 Microsoft Scripting Runtime 」の名の通り、「 Scripting 」というライブラリが持っているのです!

オブジェクトブラウザーで「 Scripting 」というライブラリを選択して頂くと、以下のように、 FileSystemObject がいるのがわかりますよね!

他にも 以下のような、便利なオブジェクトが多数含まれています

  • Dictionary
  • TextStream
  • Encoder
  • Drive
  • File
  • Folder
オブジェクトブラウザー
オブジェクトブラウザー

この「 Scripting 」に「 FileSystemObject 」が含まれるということは、つまり「 Scripting.FileSystemObject 」が正式名称!?なのです!?(たぶん)

正式名称
「 Scripting.FileSystemObject 」が正式名称!?

というわけで、オブジェクト名を使用してサンプルを書いてみます・・・①

ちょっと、うるさいので、あっさりとこう書くこともできます・・・②

「 obj 」や「 Nothing 」も削って、こう書くことも・・やりすぎですかね?w・・・③

広告

■実行時バインディング

参照を使用せずに CreateObject を使用して、 FileSystemObject をオブジェクト化する際には 実行時バインディング として「 Scripting.FileSystemObject 」と指定しないとエラーになってしまいます

というわけで、参照の場合も「 Scripting.FileSystemObject 」と書く癖をつけておいた方が良いかも知れませんね!

参照を使った3つのやり方の中で最も近いのは、①ですかね?置き換えることを考えて①の書き方にしておけば良さそうです

■VBAで参照を操作する

余談ではありますが、「 Microsoft Scripting Runtime 」のファイルは以下の “scrrun.dll” です

ファイルパス
ファイルパス

※パスは環境が64bitなので、32bitのシステムファイルのパスとして、
「 C:\Windows\SysWOW64\ 」になっていますが、32bit環境では
「 C:\Windows\System32\ 」になりますねー

つまりは、この 「 Microsoft Scripting Runtime 」 のファイルがないと FileSystemObject は使えないのです!(ないってことはないと思いますが・・)

ここからは、 VBA を使用して、参照を追加したり、削除したりしてみます!

・参照をVBAで追加

参照設定のダイアログボックスを開いて、希望するライブラリを探して選択するのって、割と面倒ですよねw
そんな時は、こんな感じで、VBAで登録してしまいましょう!

①参照追加の呼び出し元関数

②参照を追加する関数

・参照をVBAで削除

参照を削除するには、以下のように行います

③参照削除の呼び出し元関数

④参照を削除する関数

④はネストし過ぎて読みづらいですねー
こういうソースはダメ!非常に恥ずかしいソースです・・

というわけで、 VBIDE を使った書き方に書き直してみたが・・
ネストが減らない上に、余計に気持ち悪くなってきたw

⑤気持ち悪い例w

⑧ライブラリ名で参照を削除する呼び出し元関数

⑨ライブラリ名で参照を削除する関数

パッと見は綺麗になったんですが、 IsBroken プロパティを見ていないし、
「 Set ref = .References(dllName) 」でライブラリがなかったらエラーになります!

根本的にライブラリのパスを使って、追加や削除するのがダメな気がしますけどw
参考までに GUID で追加するサンプルも書いてみますが、大して変わり映えしないです

⑥ GUID を使用して参照を追加する呼び出し元関数

⑦ GUID を使用して参照を追加する関数

・参照設定の一覧表示

VBA で参照しているライブラリの一覧を表示してみます

出力結果

・参考

VBProject を使う場合は、 VBIDE というライブラリを参照するとクラスが使えるようになります!

■注意事項

参照設定は、開発時には非常に便利なのですが、開発したPC以外で動作させるには、
色々と注意事項があるのです!

  • 参照はライブラリファイルを指定する
  • 参照ライブラリがインストールしていないPCでは動作しない
  • Office 等のバージョン違いやライブラリのバージョンが異なると動作しない
  • 古いバージョンで「参照不可」になると参照や削除ができません
  • 参照不可かどうかは References の IsBroken プロパティで確認する
  • 環境依存な参照は使わないようにする
  • 実行時バインディングに変換できるよう個別でクラス化しておく

ではでは

シェア
広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い