郵便局のクリックポストを大量に出力するプログラムを作っています。
その中で決済画面に移行する際に、何秒か待つプログラムにしていましたが、
より安定的にするためにURLに任意の文字が出現するまでIEを監視するものに作っていますが
「loopに対応するDOがありません」となります。
どこを改善したらいいでしょうか?
Function targeturl(urlmozi As String) As InternetExplorer
Dim colsh As Object
Dim ie As InternetExplorer
Dim strTemp As String
Dim objIE As Object
Dim flag As Integer
'初期化
strTemp = ""
'フラッグを初期化
flag = 0
Do While flag = 1
'flagが0なら、IEの分析を繰り返す
Sleep 1
'今あるIEをすべて取得します。
Set colsh = CreateObject("shell.application")
'一つずつ分解
For Each ie In colsh.Windows
'分解したieのURLを取得する
strTemp = ie.document.Location
If InStr(strTemp, urlmozi) > 0 Then
flag = 1
Set targeturl = ie
End If
Exit For
’10ミリ秒待って再チャレンジ
Sleep 10
Loop
End Function
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ご質問のコードをざっと見ると
Sleep 1 もう少し長く取りましょう
Sleep 10 これでも短いですね。それで、取りこぼすことはないと思います。
それと一緒に、DoEvents も加えておいたほうが無難ですね。
flag = 1 は見つけたという意味ですね。
flag =0 で、Do While flag = 1 なら、Loop は、通らないはずです。
For Each ie In colsh.Windows 'ここは、objIE にするのでは? IE はわかるけれども、Shell のWindows から取れるものは、生のIE ではないはずです。
別にエラーが出ないなら、こちらが言う筋合いではないと言われそうですが。
それに、終わりがありませんね。For Each ~ Next です。
IE 側は、事前バインディングしているのに、Shell 側はしないのでしょうか。
Set colsh = CreateObject("shell.application")
それと、
strTemp = ie.document.Location
Document にLocation プロパティはあったのでしょうか。
あまり、人様のコードをいじりまわすと、また、怒られてしまいますが、私の解釈です。ただ、見つからないと、無限ループになる恐れがありそうな気がします。もうひとつ、どこかで安全弁を作ったほうがよいと思います。
Function targeturl(urlmozi As String) As InternetExplorer
Dim colsh As Object
Dim ie As InternetExplorer '←この部分は浮いています。
Dim strTemp As String
Dim objIE As Object
Dim flag As Integer
strTemp = ""
'フラッグを初期化
flag = 0
Do
'flagが0なら、IEの分析を繰り返す
Sleep 10
'今あるIEをすべて取得します。
Set colsh = CreateObject("Shell.Application")
'一つずつ分解
For Each objIE In colsh.Windows
'分解したieのURLを取得する
strTemp = objIE.LocationURL
If InStr(strTemp, urlmozi) > 0 Then
flag = 1
Set targeturl = objIE
Exit For
End If
'10ミリ秒待って再チャレンジ
Sleep 10
DoEvents
Next
Loop Until flag = 1
End Function
そこで、私なりに、コードを考えてみました。ふつう、画面が変わっているなら、IE のイベントを取るのが普通です。
VBA内部のMsgBox ですと、あまり華々しくメッセージが出ませんでしたが、拾っていることは間違いないです。
このURLの番号を探すプログラムです。
http://oshiete.goo.ne.jp/qa/9396135.html
要:Microsoft Internet Controls
'ThisWorkbook モジュール
Private WithEvents objIE As InternetExplorer
Sub StartIE()
myURL = "https://oshiete.goo.ne.jp/”
Set objIE = Nothing
Set objIE = New InternetExplorer
objIE.Navigate myURL
objIE.Visible = True
End Sub
Private Sub objIE_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
Dim FindTxt As String
FindTxt = "9396135"
If InStr(1, pDisp.LocationName, FindTxt, 1) > 0 Then
Application.EnableEvents = False
Call Call GetIEObject(objIE)
End If
End Sub
'標準モジュール
Sub GetIEObject(obj As InternetExplorer)
MsgBox obj.LocationURL
End Sub
もしも、勘違いしていましたら、ご寛容のほどを。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
getElementsByClassName不可
-
Webサイトのurlの保存方法?
-
EdgeでInPrivate上Webページの...
-
パソコン版グーグルマップを最...
-
エクセルでマクロ使うとフリー...
-
サイトのショートカットアイコ...
-
エクセル固まった時 その作業...
-
Vectorworksの文字入力について
-
VMWare Player 上でフリーズ抜...
-
デスクトップのショートカット...
-
ASUS UEFI BIOS utilityという...
-
ベクターワークス11がフリーズ...
-
Lhaplusのショートカットアイコ...
-
Visioがフリーズします
-
ワードやエクセルのプログラム...
-
フリーズ対策のソフト
-
グーグルで検索をすると「この...
-
XPで使えるアウトラインプロセ...
-
IE上でPDFファイルが開けません
-
Dreamweaverでコードビューとデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByClassName不可
-
ウィンドウをマクロで操作
-
エクセルでマクロを使い、多数...
-
エクセルをインターネットエク...
-
VBA→IEでtextareaにセル範囲の値
-
IE5.5 SP2 フルモジュールの在処
-
ブール代数を用いた、論理式の...
-
長唄などで、歌詞(?)が書い...
-
Webサイトのurlの保存方法?
-
EdgeでInPrivate上Webページの...
-
パソコン版グーグルマップを最...
-
サイトのショートカットアイコ...
-
ASUS UEFI BIOS utilityという...
-
エクセルでマクロ使うとフリー...
-
Chromeのホーム画面にウェブサ...
-
VMWare Player 上でフリーズ抜...
-
Edgeとベータ版との違いは?
-
QuickTime のキーボードショー...
-
エクセル固まった時 その作業...
-
指定されたパスは存在しません...
おすすめ情報