下記の質問が来ました。
>すいません、質問なのですが、既存のWEB画面を操作したいです。
こんにちは。
質問書き込みありがとうございます。
表示済み、起動済み、操作済み,
既存のWEB画面を操作
ですね?
手前みそですが、
http://www.ken3.org/vba/backno/vba156.html
↑を参考に
Sub aaa() 'オブジェクトを格納する変数 Dim objShell As Object, objWindow As Object 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'ウインドウの数だけまわすぞ For Each objWindow In objShell.Windows 'TypeNameでオブジェクト変数のタイプを表示する MsgBox "タイプは:" & TypeName(objWindow.document) Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'URLとタイトルを表示する MsgBox "IEみつけたよ" & objWindow.document.Title Debug.Print "タイトル:" & objWindow.document.Title Debug.Print "URL:" & objWindow.document.URL End If Next Set objShell = Nothing End Sub
この、
objWindow.document.Title
や
objWindow.document.URL
で、
該当するIEが区別可能なら、
捕まえて、(ループを抜けたりして、そのまま使う)
データセットやボタンを押す処理に入るのがいいのかなぁ?
まずは、
上記サンプルを走らせて、
.Titleで区別可能か?探ってみてください。
実例
操作中のコメント入力画面(Web上 http://www.ken3.org/cgi-bin/test/test029-1.asp )に対して、
Excel から OK,NGの固定文字、フリー入力(INPUTBOX)した文字をセットして、
登録ボタンを押すサンプル
試行錯誤の解説動画 → http://www.youtube.com/watch?v=po2IeQtSwaw
www.youtube.com
↑※いつものように、解説がループしていますが、下記の箇条書きとソースコード 合せてみてください。
箇条書きの解説
Shell.Application で 管理されている
.Windows を For Each で 1つ1つ取り出し、
TypeNameでタイプを探る。
タイプが If TypeName(objWindow.document) = "HTMLDocument" なら、
次に
URLを探す
If objWindow.document.URL = "http://www.ken3.org/cgi-bin/test/test029-1.asp"
URLが一致したら、変数objIEに保存する ( Set objIE = objWindow '代入する )
目的のIEが↑で見つかったかを
If objIE Is Nothing Then
でチェックして、見つからない時は Exit Sub
見つかったら、項目(Name="MEMO")にデータをセットする
objIE.document.all("MEMO").Value = strMSG
セット後、登録ボタンを押す
objIE.document.all("bWRITE").Click
こんな感じの流れです。
テストで使用した ソースコード
下記、テストで使用したソースコードです。
イロイロとアレンジして使ってみてください
(※自分のもの(知識として吸収)してください)
Option Explicit Sub bbb(strMSG As String) 'オブジェクトを格納する変数 Dim objShell As Object, objWindow As Object Dim objIE As Object '捕まえたIE Set objIE = Nothing '初期化 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'ウインドウの数だけまわすぞ For Each objWindow In objShell.Windows 'TypeNameでオブジェクト変数のタイプを表示する Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'URLとタイトルを表示する Debug.Print "タイトル:" & objWindow.document.Title Debug.Print "URL:" & objWindow.document.URL If objWindow.document.URL = "http://www.ken3.org/cgi-bin/test/test029-1.asp" Then '指定したURLか? Set objIE = objWindow '代入する Exit For '見つけたのでループを抜ける End If End If Next Set objShell = Nothing 'URLが見つかったか判断 If objIE Is Nothing Then 'メッセージ表示、終了 MsgBox "登録するIEのページがみつかりません" Exit Sub End If 'データをセットする objIE.document.all("MEMO").Value = strMSG '登録ボタンを押す objIE.document.all("bWRITE").Click '書き込みボタンをクリック End Sub Sub ccc() 'OK 固定入力 Call bbb("OK 了解しました") End Sub Sub ddd() 'NG固定入力 Call bbb("NG 再提出してください") End Sub Sub eee() 'フリー入力 Dim strWORK As String strWORK = InputBox("何かいれて", "input", "テスト ") Call bbb(strWORK) End Sub
終わりのあいさつ
捉え方はイロイロとあるとは思いますが、
何かの参考となれば 幸いです・・・ 三流プログラマー Ken3
PS.手前味噌解説の
回答下書き 試作 Excel A列の値(本タイトル)をWebブラウザーにセットする
http://d.hatena.ne.jp/ken3memo/20091102/1257102258
の中の
http://www.youtube.com/watch?v=nmP-34m3u_8
www.youtube.com
も、よろしくお願いします