質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6475閲覧

VBAによるIE操作について

NP3228

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/02/06 07:18

VBAによるIE操作について

VBAでIEを操作し、PHPで開発されているMoodleを操作しようと思っています。
概ね自分の思い通りに動くように作れたのですが、一点だけ問題が発生してしまいました。
①Submitのボタンを押して、②ページを読み込み待ち、③次のページのSubmitのボタンを押すという処理がうまく行きません。
エラーが出るのが、③のボタンを押したつもりになって、次の作業に行ってしまっていました。
②のページの読み込み待ちがうまく行かず、③のボタンを押したつもりになってしまい、次の作業でエラーを起こす、そんな次第です。

②のページの読み込みは下記の様に組んでます。
④の様に組んでも結果は一緒でした。
あとページが変わるまで、ボタンを押し続ける様に組むと、サーバーが落ちました。(ボタンが無くても押していることができるということだったので、試してみました。コードは残していなかった。)
ちなみにボタンを押すコードは⑤です。

PHPの読み込みを待っていないとかそんな原因ではないかと思うのですが、解決できないでしょうか。


Function IEwait(ByRef objIE As Object)
Do While objIE.readystate <> 4
DoEvents
Loop
End Function


Do Until objIE.Busy = False
WScript.sleep(250)
Loop'


Public Function IEButtonClick(ByRef objIE As Object, buttonValue As String)
Dim objInput As Object
For Each objInput In objIE.document.getElementsByTagName("INPUT")
If objInput.Value = buttonValue Then
objInput.Click
Exit Function
End If
Next

End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最終的な読み込み判定は、
先の回答にありましたとおり、
「DocumentComplete」を利用するのですが、対象のサイトがフレームで構成されている場合、URLで判定する必要があります。

下記のサイトで詳しく述べられていますので参考になさってください。

http://tokidokidokin.com/2010/05/vbaでinternet-explorerの画面遷移をイベントドリブン的に制御す/

それ以外にもIEのバージョンによっては、仕様変更のため正しく捕捉できないこともあります。

IE11では、visibleを画面遷移の前後に挟むことによって解決しています。
http://sp.okwave.jp/qa/q8751953.html

なお、moodleの問題作成が用途であれば、csvから問題文を作成するプログラムをフリーで配布されていますので、利用の検討をされるとよろしいかと思います。

http://www.itc.u-toyama.ac.jp/moodle2/tools/

投稿2015/02/28 05:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NP3228

2016/11/07 23:48

一身上の都合により返信することができませんでした。 返信が一番だったため、ベストアンサーにさせてもらいます。
guest

0

私も、ページの読み込み完了を検出できていないと思います。
DocumentCompleteイベントを使えば、検出できると思います。
例えば、IEオブジェクトを

Set IE = WScript.CreateObject("InternetExplorer.Application","IE_")

のようにインスタンス化しているなら、

Sub IE_DocumentComplete(pdisp,surl) 'do something End Sub

で読み込み完了を検出できます。

投稿2015/02/22 15:29

tohshima

総合スコア374

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NP3228

2016/11/07 23:48

一身上の都合により返信することができませんでした。 勝手な話で申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問