COM_ERR_IGN-COM_ERR_RET

構文
COM_ERR_IGN
//何等かのCOM処理
COM_ERR_RET
引数
戻値

COMエラーの種類

OLE error 8150002E, ProgID: “InternetExplorer.Application”

COM_Error:OLE Error 8150002E, ProgID: "InternetExplorer.Application"

IE.Quitで閉じてプロセスが残っている状態で再度IEを起動すると発生することがあります。

対策としては、コマンドプロンプトでプロセスを終了させる、EXEC関数で起動させるなどがあります。

DOSCMD(“TASKKILL /F /IM iexplore.exe”)
EXEC(“C:\Program Files\Internet Explorer\iexplore.exe”)
GETID(“Internet Explorer”, “IEFrame”, -1)
IE = GETACTIVEOLEOBJ(“InternetExplorer.Application”)	

以下はCOM_ERR_IGNで書く場合。

REPEAT
	COM_ERR_IGN
		DIM IE = CREATEOLEOBJ(“InternetExplorer.Application”)
	COM_ERR_RET
	SLEEP(1.000)
UNTIL !COM_ERR_FLG
IE.Visible = TRUE
IE.Quit

例外が発生しました。

スペルミスやページの読み込みが完了していないときにIE操作をすると発生します。

RPCサーバーを利用できません。

IE.Quitで終了させたIEオブジェクトを操作しようとすると発生します。

クラス文字列が無効です, ProgID: “***”

CREATEOLEOBJの第一引数の値に存在しないクラス文字列を指定したときに発生します。

画像の場合だと「InternetExplorer.Application」と書くべきところ「InteretExplorer.Application」と記述しているためにエラーが発生しています。

(メッセージなし)

生成されていないもしくは終了したオブジェクトにアクセスしようとしているなど。

原因がわからない場合は操作している対象のアプリ(OfficeならばVBAに移植するなどし)プログラムを実行するとエラーコードが表示されるので原因を特定するヒントになるかもしれません。

以下はExcelでセル番地が範囲外のためエラーとなっているプログラムの例。0行0列が範囲外なのは数値だと見てわかるが、これが変数でループとかしてるとよくやるミス。

DIM Excel = CREATEOLEOBJ(“Excel.Application”)
Excel.Visible = TRUE
Excel.Workbooks.Add()

Excel.Cells(0, 0).Value = 1

以下はUWSCで実行したときのエラー。

以下は同じ動作をするプログラムをExcelに移植したプログラムとエラーメッセージ。

[開発]、[Visual Basic]、[挿入]、[標準モジュール]

Sub main()
	Workbooks.Add()
	Cells(0, 0).Value = 1
End Sub

UWSCではただエラーとしかわからないが、Excelだとエラーコード1004と表示されます。1004は存在しないファイルを開こうとしたとき、存在しないセルアドレスにアクセスしたとき、という風にエラーの原因を絞ることができます。

管理者権限がないときもこのエラーが発生します。

以下はWshShell.RegDeleteでレジストリを削除しようとしたときのエラー。

セルが編集状態のためCOMエラーが出て値の入力ができないのを、エラーが出なくなって値が入力できるまでループする処理。

DIM Excel = CREATEOLEOBJ(“Excel.Application”)
Excel.Visible = TRUE
Excel.Workbooks.Add

DIM ID = GETID(“Excel”)
CTRLWIN(ID, ACTIVATE)
KBD(VK_F2, CLICK, 500)		// 編集状態にする

REPEAT
	FUKIDASI(“COM_Error”)
	COM_ERR_IGN
		Excel.Range(“A1”).Value = 8
	COM_ERR_RET
UNTIL !COM_ERR_FLG

FUKIDASI()
SLEEP(3.000)

Excel.Application.DisplayAlerts = FALSE
Excel.Quit