GETACTIVEOLEOBJゲットアクティブオーエルイーオブジェクト関数

本ページには広告が含まれています。

すでに起動中のCOMオブジェクトに対してアクセスします。

構文
  1. Object = GETACTIVEOLEOBJ( COMオブジェクト名, タイトル, 順番 )
引数
COMオブジェクト名 (String)必須
COMオブジェクト名
タイトル (String)省略可
複数時にタイトルで区別(一部でOK)
Excel, Access, Wordの場合はファイル名を指定
IE,Office以外では無効
順番 (Integer)省略可
IEにてタイトルが同じ時に区別(デフォルトは最新(一番最後に起動)のもの)
IEのみ有効
戻り値
COMオブジェクト

使い方

起動中のオブジェクトを取得

起動中のInternetExplorer オブジェクトを取得し、ブラウザのタイトルを出力します。複数のInternet Explorerが起動しているときは最後に起動したものを、取得できない場合はCOM_Errorが発生します。

UWSC
DIM IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
PRINT IE.Document.title

タイトルで区別

複数のInternet Explorerが起動しているときはタイトル名で区別し取得することができます。以下はYahoo! JAPANとGoogleのページを開き、タイトルにYahoo!を含むものを取得します。GETACTIVEOLEOBJ関数の第二引数にYahoo!を指定していない場合、後に開いたGoogleのCOMオブジェクトが取得されます。

UWSC
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://yahoo.co.jp")
BusyWait(IE)

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://google.co.jp")

IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "Yahoo!")
PRINT IE.Document.title
結果
プレーンテキスト
Yahoo! JAPAN

順番を指定

タイトルが同じときに順番を指定することで区別することができます。

以下はYahoo! JAPANを開いたInternet Explorerを2つ起動し、検索ボックスにGETACTIVEOLEOBJ関数で取得したときの番号を入力します。後に開いた方が番号が大きくなります。

UWSC
FOR i = 1 TO 2
	DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
	IE.Visible = TRUE
	IE.Navigate("http://yahoo.co.jp")
	BusyWait(IE)
NEXT

FOR i = 1 TO 2
	IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "Yahoo! JAPAN", i)	
	DIM Document = IE.Document
	DIM Elements = Document.getElementsByName("p")
	Elements.Item(0).innerText = i
NEXT

IEオブジェクトを取得時にCOMエラーが出る

インターネット オプション-セキュリティタブの保護モードを有効にするにチェックが入っているとエラーになるようです。

プログラム実行例

シート情報を取得する

UWSC
DIM Excel = GETACTIVEOLEOBJ("Excel.Application")

WITH Excel
	PRINT "シートの数:" + .Sheets.Count
	PRINT "ワークシートの数:" + .Worksheets.Count
	PRINT "グラフシートの数:" + .Charts.Count
	PRINT "アクティブシートの名前:" + .ActiveSheet.Name
ENDWITH
使用関数

メールの受信を検知(Outlook)

メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") 

DIM Outlook = GETACTIVEOLEOBJ("Outlook.Application")
OLEEVENT(Outlook, "ApplicationEvents_11", "NewMailEx", "receivedMail")

WHILE TRUE
	FUKIDASI("ESCで終了")
	SLEEP(0.001)
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE receivedMail()
	PRINT text(now(), "yyyy/mm/dd hh:nn:ss")
FEND