
郵便局のクリックポストを大量に出力するプログラムを作っています。
その中で決済画面に移行する際に、何秒か待つプログラムにしていましたが、
より安定的にするために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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excel
-
VLOOKUP FALSEのこと
-
if関数の複数条件について
-
エクセルシートの見出しの文字...
-
エクセルでフィルターした値を...
-
エクセルの文字数列関数と競馬...
-
【マクロ】数式を入力したい。...
-
【画像あり】オートフィルター...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【マクロ】実行時エラー '424':...
-
Dir関数のDo Whileステートメン...
-
【マクロ】【画像あり】4つの...
-
【マクロ】エラー【#DIV/0!】が...
-
【Officer360?Officer365?の...
-
空白のはずがSUBTOTAL関数でカ...
-
表計算ソフトでの様式の呼称
-
エクセルに写真が貼れない(フ...
-
【関数】3つのセルの中で最新...
-
【マクロ】【画像あり】4つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByClassName不可
-
ブール代数を用いた、論理式の...
-
Operaのsearch.iniにgoogle翻訳...
-
長唄などで、歌詞(?)が書い...
-
ウィンドウをマクロで操作
-
Webサイトのurlの保存方法?
-
EdgeでInPrivate上Webページの...
-
Photoshop初心者です。PCが重い...
-
パソコン版グーグルマップを最...
-
サイトのショートカットアイコ...
-
ASUS UEFI BIOS utilityという...
-
指定されたパスは存在しません...
-
Microsoft Edge で InPrivateを...
-
パソコンと体質的に相性が悪い...
-
Photoshopのショートカット
-
ファンが急に回転してフリーズ...
-
インターネットショートカット...
-
VMWare Player 上でフリーズ抜...
-
無線LANアダプターってかなり熱...
-
PCのウェブサイトのショートカ...
おすすめ情報