Contents
- 構文
- COM_ERR_IGN
//何等かのCOM処理COM_ERR_RET
- 引数
- 戻り値
COMエラーの種類
名前が不明です。
存在しないメソッド・プロパティを使用したときに発生します。
IE.Navgate(“http://example.com”)
COM_Error:名前が不明です。
3行目: IE.Navgate(“http://example.com”)
クラス文字列が無効です, ProgID: “***”
存在しないクラス文字列を記述したことによるエラー。
プログラム
DIM IE = CREATEOLEOBJ(“Internet Explorer.Application”)
メッセージ。
COM_Error:クラス文字列が無効です, ProgID: “Internet Explorer.Application”
1行目: DIM IE = CREATEOLEOBJ(“Internet Explorer.Application”)
RPC サーバーを利用できません。
IE.Quitで閉じたIEを操作しようとしたときに発生します。
IE.Navigate(“http://example.com”)
COM_Error:RPC サーバーを利用できません。
3行目: IE.Navigate(“http://example.com”)
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操作をすると発生します。
(メッセージなし)

生成されていないもしくは終了したオブジェクトにアクセスしようとしているなど。
原因がわからない場合は操作している対象のアプリ(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でレジストリを削除しようとしたときのエラー。
.png)
例
セルが編集状態のため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