VBA CreateObject関数と参照設定の違い



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

どうも、takaです。

さて、【E-VBA】では今までExcelVBAでAccessやOutlookといった他のOfficeソフトを操作するいわゆる【OLE】を解説してきました。

ですが、お恥ずかしい話ですが私が未熟だった事もあり間違えた解説をしていた部分がございました。他の解説サイトを見てみると同じような過ちをしているサイト様がいくつかありました。

ですが、私はVBAを専門に扱う解説サイトとして「間違えたままではいけない」ということで今回は【OLE】についてしっかりと解説していきたいと思います。

他のOfficeソフトを操作する(OLE)には2つの方法がある

さて、まず他のOfficeソフトを操作する方法は大きく分けて2つの方法があります。

  1. CreateObject関数を使う方法
  2. 参照設定を使う方法

です。

私が間違えた過ちはこれらの2つの方法を混合して使用していた点です。

CreateObject関数と参照設定の違い

CreateObject関数は簡単に言えば指定したアプリケーションのオブジェクトを作成して返してくれる関数です。

下記のコードはWordをCreateObject関数を使用して起動するコードです。

そして参照設定を設定した場合のコードはこちらになります。

参照設定する方法はこちらを参考にしてください。
Wordを参照設定する場合は【Microsoft Word ##.# Object Library】を探し出してください
これらは同じ動作をしますがコードは違いますよね?

なぜこのようになるのか?しっかりと明記はされていませんが個人的には下記のような特性があります。

CreateObject関数参照設定されていないブックでも使える
参照設定参照設定されていないブック上では使えない

はい、これが一番大きなポイントの違いです。

これだけではCreateObject関数のほうがいいんじゃないか?と思われるかもしれませんが、参照設定にもメリットがあります。

それはインテリセンスが使用できるということです。

インテリセンスとは画像のようなメソッドやプロパティを表示してくれる機能です。

よくある間違い

よくあるのが参照設定を設定しているのにCreateObject関数を使用してオブジェクトを作成しているコードが多いです。

もちろん動作はしますので【間違い】というのかは迷うところですが。良いことではありません。

本サイトも一部のコードがこれと同じことをしてしまっている部分がございます。もちろん動作には問題はありませんが、このまま放っておいて良い事ではありませんので、順次修正させていただきます。この場を借りてお詫び申し上げます。

結局CreateObject関数と参照設定どちらがいいのか?

個人的には【どちらでもいい】が良いと思っておりますが、参照設定を使用したほうが開発は捗る(インテリセンスなど)ので参照設定を使用したほうが良いかもしれません。

ですが、フォームやコードをVBAに詳しくない方に配布などのをする場合は、わざわざ対象のブックで参照設定をしてもらわないといけないというデメリットがありますので、その様な時はCreateObject関数で参照設定をしないで動作するように作成するのが良いでしょう。

フォロー・チャンネル登録お願いします

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です