Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
FSOの宣言方法の違いについて教えてください
投稿日時: 22/09/01 11:20:10
投稿者: QooApp

いつもお世話になっております。
ふと疑問に思ったのでお伺いします。
FSO制御の際に宣言する方法として下記のパターンがあると思うのですが、どのような違いがありますでしょうか?
推奨される宣言方法の指定がありますでしょうか?
 

Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject

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

回答
投稿日時: 22/09/01 12:09:47
投稿者: sk

引用:
Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject

こちらは事前バインディング
(アーリーバインディングとも言う)
 
引用:
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

こちらは実行時バインディング
(レイトバインディング、遅延バインディングとも言う)
 
引用:
どのような違いがありますでしょうか?

https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/early-late-binding/
https://vbae.odyssey-com.co.jp/column3/s32402.html
https://vbae.odyssey-com.co.jp/column3/s32403.html
https://vbae.odyssey-com.co.jp/column3/s32404.html

投稿日時: 22/09/01 13:09:24
投稿者: QooApp

めちゃくちゃ良いお話で感動してます。
自分なりにまとめてみました。
 
■事前にバインドするメリット
・メモリの余計な消費をせず、必要なサイズだけ確保できる
・自動コード補完機能やソースコードを書く上でもサポートが受けられる
・遅延バインディングオブジェクトよりもはるかに高速
・コードを読みやすくして管理を容易にする
・コンパイル時にエラーを報告できるため、ランタイム エラーの数が減少する
 
■事前にバインドするデメリット
・参照設定から必要なライブラリにチェックを入れることが必要
 
○後からバインドするメリット
・参照設定不要で対象を使用できる
 
○後からバインドするデメリット
・Object型などの変数に格納するので変数あたりのメモリサイズが過剰になりやすい
・Public として宣言されている型メンバーにアクセスするためにのみ使用できる
・Friend または Protected Friend として宣言されているメンバーにアクセスすると、ランタイム エラーが発生する
 
エクセルマクロを頒布するときのFSO程度のライブラリであれば参照設定して最適化しておき、
ユーザーのPCに存在するか不明瞭な外部ライブラリはファイルチェック処理を挟んで遅延バインディングするほうがよさそうだな、という感想です。
間違ってたらすみません。