もくじ

taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、takaです。
さて、【E-VBA】では今までExcelVBAでAccessやOutlookといった他のOfficeソフトを操作するいわゆる【OLE】を解説してきました。
ですが、お恥ずかしい話ですが私が未熟だった事もあり間違えた解説をしていた部分がございました。他の解説サイトを見てみると同じような過ちをしているサイト様がいくつかありました。
ですが、私はVBAを専門に扱う解説サイトとして「間違えたままではいけない」ということで今回は【OLE】についてしっかりと解説していきたいと思います。
他のOfficeソフトを操作する(OLE)には2つの方法がある
さて、まず他のOfficeソフトを操作する方法は大きく分けて2つの方法があります。
- CreateObject関数を使う方法
- 参照設定を使う方法
です。
私が間違えた過ちはこれらの2つの方法を混合して使用していた点です。
CreateObject関数と参照設定の違い
CreateObject関数は簡単に言えば指定したアプリケーションのオブジェクトを作成して返してくれる関数です。
下記のコードはWordをCreateObject関数を使用して起動するコードです。
Sub Sample() 'オブジェクト変数を宣言 Dim WordApp As Object 'CreateObject関数でオブジェクトを作成し変数にセット Set WordApp = CreateObject("Word.Application") '作成したオブジェクトを利用してWordを表示 WordApp.Visible = True End Sub
そして参照設定を設定した場合のコードはこちらになります。
Wordを参照設定する場合は【Microsoft Word ##.# Object Library】を探し出してください
Sub Sample() 'オブジェクト変数を宣言 Dim WordApp As Word.Application ' Wordのインスタンスを作成。 Set WordApp = New Word.Application 'Wordを表示する WordApp.Visible = True End Sub
これらは同じ動作をしますがコードは違いますよね?
なぜこのようになるのか?しっかりと明記はされていませんが個人的には下記のような特性があります。
CreateObject関数 | 参照設定されていないブックでも使える |
参照設定 | 参照設定されていないブック上では使えない |
はい、これが一番大きなポイントの違いです。
これだけではCreateObject関数のほうがいいんじゃないか?と思われるかもしれませんが、参照設定にもメリットがあります。
それはインテリセンスが使用できるということです。


よくある間違い
よくあるのが参照設定を設定しているのにCreateObject関数を使用してオブジェクトを作成しているコードが多いです。
もちろん動作はしますので【間違い】というのかは迷うところですが。良いことではありません。
Sub Sample() '参照設定を設定済み Dim WordApp As Word.Application '参照設定を設定済みですが【CreateObject関数】でオブジェクトを作成 Set WordApp = CreateObject("Word.Application") ' Set WordApp = New Word.Application←実際はこれでいい。 WordApp.Visible = True End Sub
結局CreateObject関数と参照設定どちらがいいのか?
個人的には【どちらでもいい】が良いと思っておりますが、参照設定を使用したほうが開発は捗る(インテリセンスなど)ので参照設定を使用したほうが良いかもしれません。
ですが、フォームやコードをVBAに詳しくない方に配布などのをする場合は、わざわざ対象のブックで参照設定をしてもらわないといけないというデメリットがありますので、その様な時はCreateObject関数で参照設定をしないで動作するように作成するのが良いでしょう。
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す