EXCEL VBAでIEにアクセスするプログラムが特定のPCで実行エラーになりました。
インプレスジャパンの雑誌「Excel VBA でIEを思いのままに操作できるプログラム術」で公開している以下のプログラムも11行目「IE.document.getElementById("Text1").Value = "ABC"」のところで実行時エラー438となります。
Sub useForm()
Dim IE As InternetExplorer
Dim form As HTMLFormElement
Dim Doc As HTMLDocument
Dim strText As String
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "http://book.impress.co.jp/appended/3384/4-11.html"
Do While IE.Busy Or IE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
IE.document.getElementById("Text1").Value = "ABC" '←エラーとなる箇所
IE.document.getElementById("Select1").Value = "example.ne.jp"
Set form = IE.document.forms("Form1")
form.submit
IE.Quit
End Sub
11行目実行時点で、ローカルウィンドウでIEオブジェクトのdocumentプロパティの内容を参照すると、何もセットされていない(変数なし)状態なので、そのためエラーになっているものと思われます。
他のPCでは問題なく実行可能なので、EXCELの設定又はIEの設定の問題なのではないかと疑っていますが、EXCELは再インストールしましたが改善しませんでした。
プログラムが動作しないPCの環境はWindows10(64ビット)、EXCEL(office365の最新版)をインストールしています。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんにちは、
form.submit とコードにあったので躊躇しましたが、、、
>他のPCでは問題なく実行可能なので、EXCELの設定又はIEの設定の問題なのではないかと疑っています
確かにnavigate先のソースには、<input id="Text1" name="Text1" type="text" value="">が存在しますので
通常、実行時エラー438が発生する可能性は低いと思います。
ソース量から考えても、Do While IE.Busy Or IE.readyState < READYSTATE_COMPLETE...で十分な気がします。
仮にLoopの後にStopを入れ、IEのソースを見た時に<input id="Text1" name="Text1" type="text" value="">が
無いと言う事ではないと思いますね
Officeの問題は、EXCELは再インストールしましたとのことなので外すとした場合。
特定PCの不具合と考えた場合、IEのバージョン、設定などかも知れませんが、他の要因として、バックグランドソフトの可能性もあります。
セキュリティ系や入力補助(支援)ツール(アドイン)など、、
原因を切り分けて検証しているとの事なので、セーフモードで起動(または、タスクで切っていくなど)して確認するなどしてみてはいかがでしょう。
的違いかもしれませんが、参考まで
お礼が遅くなり、申し訳ございませんでした。
特定の機種でマクロが動かいないことからすると、アドインは疑っています。
セーフモード等を試してみます。
No.2
- 回答日時:
No1です
>問題のプログラムは1行ずつ実行し、問題の箇所の手前で十分時間を置いても、
>問題は解消しませんでした。
エラー時にウォッチウインドウを利用すると、IEオブジェクトのメンバーを確認することができると思います。
多分、documentエレメントは存在しないと思われますが、他にどこまでのオブジェクトが取れているかなどを確認してみることで、ヒントが得られるかも知れません。
No.1
- 回答日時:
こんにちは
ご提示のコード自体には問題がないように見受けられます。
>他のPCでは問題なく実行可能なので、~~
とのことですので、その環境特有の問題だと考えられます。
ですので、以下は役に立つかどうかまったくわからない内容になってしまいますが・・・
「実行時エラー438」はオブジェクトに存在しないプロパティやメソッドを使用しようとしたということですので、直接の原因は、オブジェクトが取得できていないということのように想像されます。
>11行目実行時点で、ローカルウィンドウでIEオブジェクトのdocumentプロパティの
>内容を参照すると、何もセットされていない(変数なし)状態~~
どのことですので、IE.documentが取得できていないので、(getElementByIdメソッドがないため)エラーになっているということでしょう。
ブラウザ上には目的のページが表示がされているものと推測しますので、試しにループを抜けたところで、stopあるいはmsgboxなどで、処理を一時停止して(=時間をおいて)から継続してもうまくいかないでしょうか?
かって、IE操作のコードで、表示後にdocumentどころかIEオブジェクトが無効になってしまう事態に遭遇したことがあります。
その時は、固有環境の問題ではなく、サーバ側で新たなウィンドウを立上げて元のIEオブジェクトは破棄してしまっているのが原因でしたが…
しかたがないので、VBSに切り替えて、IEへのハンドルを探すところから新たに始めました。
ご回答ありがとうございました。
ご指摘のとおり、ブラウザ上には目的の画面が表示されます。問題のプログラムは1行ずつ実行し、問題の箇所の手前で十分時間を置いても、問題は解消しませんでした。
本当の問題は、業務用の別のプログラムがあるのですが、原因を単純化する作業のなかで、提示させていただいたごく簡単なプログラムでも同様なエラーが発生するとのところまでたどり着いたわけです。
私も異なる観点から、調べてみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- InternetExplorer(IE) Microsoft edgeのIEモードを解除したいのですが。 3 2023/04/09 13:51
- その他(ブラウザ) IE・edgeで日増しに観られるサイトが減ってくる。 1 2022/10/04 22:40
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
実行時エラー 438 の解決策をおしえてください。
Visual Basic(VBA)
-
-
4
VBAでgetElementByTagName
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
Excel VBAでWordの複数ファイル...
-
EXCEL VBA オートシェイプナン...
-
オブジェクトが見つかりません
-
エクセルのVBAの標準モジュール...
-
このように書くべきですか? { ...
-
InternetExplorer.Application...
-
Excel VBA Collection.add で R...
-
エクセルのテキストボックスをV...
-
WordにOLEで埋め込んだExcelでW...
-
(初心者です)VBAについて。「実...
-
VBで引数にDictionaryオブジェ...
-
パワーポイント filedialogでフ...
-
改ページを挿入
-
ExcelでAccessのテーブルにADO...
-
VBAでWebページにセルの値を入力
-
ある文字列が全て数字であるか...
-
VBScriptでCSVファイルのデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
テキストボックス中の文字列の...
-
PowerPointVBAでスライドマスタ...
-
エクセルマクロエラー「'Cells'...
-
Excelでフィルタをかけると警告...
-
VBAからPDFファイルにパスワー...
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBAについてです。 初心者です...
-
VBA:オートシェイプの線の長...
-
VBで引数にDictionaryオブジェ...
-
AccessVBAで「dim dbs as datab...
おすすめ情報