VBA関数
GetObject関数

Excelマクロで必須のVBA関数を入門・初級・初心者向けに詳細解説
最終更新日:2019-11-22

GetObject関数


ActiveX コンポーネントから提供されたオブジェクトの参照を返します。
ファイルパス(フルパスと名前)からオブジェクトの参照を作成したり、既に起動中のオブジェクトを取得する際に使用します。


GetObject関数の構文

GetObject([ pathname ], [ class ])

pathname
省略可能。Variant (String)。
取得するオブジェクトを含むファイルの完全パスと名前。
指定文字列の大文字小文字は問いません。
pathnameを省略する場合は、classを指定する必要があります。
pathnameに関連付けられたアプリケーションが起動され、指定したファイル内のオブジェクトがアクティブ化されます。

省略時
指定したクラスの、現在起動中のオブジェクトの参照を取得します。
指定したクラスのオブジェクトが起動していない時はエラーになります。
""(長さ0の文字列)指定時
指定したクラスの新しいインスタンスへの参照が返されます。

class
省略可能。Variant (String)。
オブジェクトのクラスを表す文字列。
classを省略する場合は、pathnameを指定する必要があります。
classの構文は、appname.objecttype で指定します。

appname 必須。Variant(String)。
オブジェクトを提供するアプリケーションの名前。
objecttype 必須。Variant(String)。
作成するオブジェクトの型またはクラス。

構文には一部例外があり、"htmlfile"の指定でHTMLドキュメントを作成できます。
CSVのVBAでの読込方法については複数の記事を掲載しており、人気記事として多くのアクセスがあります。掲載しているVBAコードは汎用的に書いてあり、ほぼそのまま使用できるものです。しかし、CSVは多くの形式(区切り文字、文字コード等)があり、今まで掲載したコードでは解決出来ないものがあります。

戻り値
取得または作成したオブジェクトへの参照が返されます。
指定したファイルが存在しない場合、または、指定した型のオブジェクトが存在しない場合は、エラーが発生します。

GetObjectの解説

GetObject関数で作成または取得したオブジェクトを利用するには、以下のような方法があります。
・CreateObject関数の戻り値をSetステートメントでオブジェクト変数に代入する
・Withステートメントのオブジェクトに指定する
・プロシージャー呼び出し時の実引数に指定する
等々の方法があります。

ファイルの一部をアクティブにできるアプリケーションもあります。
ファイルの一部をアクティブにするには、ファイル名の後に感嘆符 (!) を付け、アクティブにする部分を表す文字列をその後に指定します。

引数classを指定しない場合、指定したファイル名に基づいて、起動するアプリケーションおよびアクティブにするオブジェクトが決められます。
ただし、ファイルによっては、複数のオブジェクトのクラスがサポートされています。
このような場合、ファイル内でアクティブにするオブジェクトを指定するには、省略可能な引数 class を使います。

単一インスタンス オブジェクトの場合、長さ 0 の文字列 ("") を指定して GetObject 関数を呼び出すと、常に同じインスタンスが返り、引数 pathname を省略すると、エラーが発生します。

文章を読むだけでは、なかなか理解しづらいと思います。
以降のVBAサンプルコードで具体的な使い方を確認してください。

GetObject関数の使用例

エクセルVBAで良く使うオブジェクトは以下を参照してください。
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclass、

pathnameとclassを指定


Dim obj As Object
Set obj = GetObject("フルパス\ワードファイル.docx", "Word.Document")
With obj.Application
  .Visible = True
  .Selection.TypeText Text:="abc"
End With
※ファイルが無い場合はエラーになります。

Wordインスタンスが無ければ作成し、あればそのインスタンスに、
"フルパス\ワードファイル.docx"を読み込んだオブジェクトへの参照を返します。
上記VBAでは、変数objを解放していないので、Wordは起動されたままになります。

pathnameのみ指定、classを省略
Set obj = GetObject("フルパス\エクセル.xlsx")
Debug.Print TypeName(obj)
Set obj = GetObject("フルパス\ワードファイル.docx")
Debug.Print TypeName(obj)
Set obj = GetObject("フルパス\パワポファイル.pptx")
Debug.Print TypeName(obj)
Set obj = Nothing
※ファイルが無い場合はエラーになります。

この実行結果は、
Workbook
Document
Presentation
このようになります。
Applicationではなく、その下のオブジェクトが返されることに注意してください。
class を指定しない場合、
起動するアプリケーションとアクティブ化するオブジェクトは、指定したファイル名に基づいて自動的に決定されます。

変数宣言のAsで型指定する場合は、それぞれ、
Dim obj As Workbook
Dim obj As Word.Document
Dim obj As PowerPoint.Presentation
ただし、それぞれのアプリケーションの参照設定が必要になります。

pathnameに""とclassを指定
Dim obj As Object
Set obj = GetObject("", "Word.Application")
Debug.Print obj.Name
Set obj = GetObject("", "Word.Document")
Debug.Print obj.Name
Set obj = Nothing

この実行結果は、
Microsoft Word
文書 1
このようになります。
どちらも同じインスタンスになりますが、アクティブ化されるオブジェクトが違ってきます。
型を指定する場合は、それぞれ、
Dim obj As Word.Application
Dim obj As Word.Document
ただし、Wordアプリケーションの参照設定が必要になります。

classのみ指定、pathnameを省略


Dim obj1 As Object
Set obj1 = GetObject("フルパス\sample1.docx")
Debug.Print obj1.Name
Dim obj2 As Object
Set obj2 = GetObject(, "Word.Application")
Debug.Print obj2.Documents(1).Name
Set obj1 = Nothing
Set obj2 = Nothing
※ファイルが無い場合はエラーになります。

Wordが起動されていない状態で、このVBAを実行した結果は、
sample1.docx
sample1.docx
となります。
obj1とobj2の違いについて注意してください。
obj1は、Word.Documentです。
obj2は、Word.Applicationになります。
obj2では、既に起動されているWordアプリケーションを取得しています。
そして、Wordアプリケーションの先頭のドキュメントを表示しています。

上記VBAで最初のGetObjectが無く、2番目のGetObjectだけの場合、
Wordアプリケーションが起動されていない場合はエラーとなります。

Dim obj As Object
Set obj = GetObject(, "Word.Application")
Set obj = Nothing

この場合、
Wordアプリケーションが起動されていればそのアプリケーションが取得され、
Wordアプリケーションが起動されていない場合はエラーとなります。

単一インスタンス オブジェクトの場合、pathnameを省略するとエラーが発生
Set obj = GetObject("", "Scripting.FileSystemObject")
Set obj = GetObject(, "Scripting.FileSystemObject")

pathnameを省略した2行目はエラーになります。
"Scripting.Dictionary"
"VBScript.RegExp"
これらも同様です。
このようなオブジェクトの場合、pathnameには""を指定するかCreateObject使用してください。

GetObject関数とCreateObject関数の使い分け

GetObject関数は、
オブジェクトの現在のインスタンスがある場合、
または、
既にファイルが読み込まれた状態のオブジェクトを作成する場合に使用します。

現在のインスタンスがなく、ファイルが読み込まれた状態のオブジェクトを起動する必要がない場合に使用します。

開くべきファイルが限定されている場合は、GetObject関数の方がVBA記述が少なくて済みます。
ただし、GetObjectで返されるオブジェクトには注意する必要があります。

Dim obj As Object
Set obj = GetObject("フルパス\sample1.docx")
Debug.Print obj.Name
Set obj = Nothing

Dim wdApp As Object
Set wdApp = CreateObject("Word.Application")
Dim obj As Object
Set obj = wdApp.Documents.Open("フルパス\sample1.docx")
Debug.Print obj.Name
Set obj = Nothing
Set wdApp = Nothing

上記2つのVBAは同じことをしています。
変数objには"フルパス\sample1.docx"を読み込んだWord.Documentへの参照が入ります。

※VBA関数一覧

VBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他…18 MicrosoftDocsOfficeV…



同じテーマ「VBA関数」の記事

Int関数
Oct関数
Rnd関数
Round関数
CreateObject関数
DoEvents関数
GetObject関数
InputBox関数
MsgBox関数
RGB関数
Shell関数


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

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • GetObject関数

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


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



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