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!を含むものを取得します。の第二引数に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

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数)
//   values : 追加する要素をvalue1から指定
// 【戻り値】
//   処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i)  EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   needle : 検索する値
//   haystack : 配列
// 【戻り値】
//   needleが見つかった場合に配列のキー
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
	DIM i = 0
	FOR item IN haystack
		IFB item = needle THEN
			RESULT = i
			EXIT
		ENDIF
		i = i + 1
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト
// 【戻り値】
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したいInternetExplorer オブジェクトのタイトル・URLもしくは数値を指定
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻り値】
//   条件に一致するInternetExplorer
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM ShellWindows = Shell.Windows
	DIM IE[-1]
	FOR i = 0 TO ShellWindows.Count - 1
		TRY
			IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
				arrayPush(IE, ShellWindows.Item(i))
			ENDIF
		EXCEPT
		ENDTRY
	NEXT
	SELECT CHKNUM(str)
		CASE TRUE
			IFB str = 0 THEN
				RESULT = LENGTH(IE)
			ELSE
				IF str  FALSE;	num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
				CASE pregGrep(pattern, urlList)  FALSE;		num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
			SELEND
			TRY
				RESULT = IE[num]
			EXCEPT
				RESULT = ERR_VALUE
			ENDTRY
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式
//   truepart : 評価した式がTrueのときに返す値
//   falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   pattern : 検索するパターンを表す文字列
//   array : 検索される配列
// 【戻り値】
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
	DIM res[-1]
	FOR item IN array
		IF reTest(item, pattern) THEN arrayPush(res, item)
	NEXT
	RESULT = SLICE(res)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列
//   Pattern : 正規表現で使用するパターンを設定
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
//   正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列
//   multiplier : inputsを繰り返す回数
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前
//   dimension : 返す次元を示す整数
// 【戻り値】
//   配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND

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
使用関数
解説(自動生成)