本ページには広告が含まれています。
目次
すでに起動中のCOMオブジェクトに対してアクセスします。
- 構文
- Object = GETACTIVEOLEOBJ( COMオブジェクト名, タイトル, 順番 )
- 引数
- COMオブジェクト名 (String)必須
- COMオブジェクト名
- タイトル (String)省略可
- 複数時にタイトルで区別(一部でOK)
Excel, Access, Wordの場合はファイル名を指定IE,Office以外では無効 - 順番 (Integer)省略可
- IEにてタイトルが同じ時に区別(デフォルトは最新(一番最後に起動)のもの)IEのみ有効
- 戻り値
- COMオブジェクト
使い方
起動中のオブジェクトを取得
起動中のInternetExplorer オブジェクトを取得し、ブラウザのタイトルを出力します。複数のInternet Explorerが起動しているときは最後に起動したものを、取得できない場合はCOM_Errorが発生します。
DIM IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
PRINT IE.Document.title
タイトルで区別
複数のInternet Explorerが起動しているときはタイトル名で区別し取得することができます。以下はYahoo! JAPANとGoogleのページを開き、タイトルにYahoo!を含むものを取得します。GETACTIVEOLEOBJ関数の第二引数にYahoo!を指定していない場合、後に開いたGoogleのCOMオブジェクトが取得されます。
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関数で取得したときの番号を入力します。後に開いた方が番号が大きくなります。
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エラーが出る
インターネット オプション-セキュリティタブの保護モードを有効にするにチェックが入っているとエラーになるようです。
プログラム実行例
シート情報を取得する
DIM Excel = GETACTIVEOLEOBJ("Excel.Application")
WITH Excel
PRINT "シートの数:" + .Sheets.Count
PRINT "ワークシートの数:" + .Worksheets.Count
PRINT "グラフシートの数:" + .Charts.Count
PRINT "アクティブシートの名前:" + .ActiveSheet.Name
ENDWITH
使用関数
メールの受信を検知(Outlook)
メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。
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
使用関数