![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
今まで、何でもなかったのですが、fc2ブログの PRの枠内の内容が変わったせいか、
ページがハングします。
で、
.Busy = True <> "complete"
この部分で、プログラムが止まります。
時間で このルーチンを逃げたいのですが、一番簡単な方法は無いでしょうか?できれば 2分くらいで・・・・
で、
Do While .Busy = True
DoEvents
For i = 1 To 40
Call Sleep(50)
DoEvents
Debug.Print .Busy
If i > 40 Then
Exit Sub
End If
Next
Loop
これでテストしたんですが
.Busy が False でも DO-LOOP を ぬけてくれないのです。
どこで 間違ったでしょうか
Set netobjIE = CreateObject("internetExplorer.application")
url = "http://admin.blog.fc2.com/control.php?mode=edito …
With netobjIE
.navigate url
.Visible = True
Do While .Busy = True
DoEvents
Loop
Do While .document.readyState <> "complete"
DoEvents
Loop
Dim in_str As String
Dim doc As HTMLDocument
Set doc = netobjIE.document
Dim sel As IHTMLInputElement
in_str = "ログイン FC2 - 無料ホームページ"
'Debug.Print InStr(IE.document.Title, in_str)
If InStr(netobjIE.document.Title, in_str) > 0 Then 'ログインページなら
No.4ベストアンサー
- 回答日時:
#3の回答者です。
>FC2のPRフレームが、特定のスポンサーの時、HPを読み込め無くてハング状態になるようです。
それは気が付かなかったですね。
最近、また、AdBlock Plusを付けるようになったので、まったく気にならないのです。AdBlock自体が問題を発生させるのは知っていますが、やむを得ないのです。解決策とは言えませんが、一つの方法であることは間違いないと思います。
IEのみでも、同じ効力を発生させることができるのですが、一旦、それをすると、戻せないのです。快適とは言っても見れないものもあります。それに懲りて、AdBlock を利用しているのですが、もうちょっと気の利いたのがあればとは思っています。
おっしゃっていた状況は、想像はつくのですが、ExcelのVBAは、そういう点で弱いです。たぶん、JavaScript と Active X コントロールをVBAの稼働している限りは、有効・無効が可能だと思います。
http://www.ken3.org/vba/backno/vba117.html
objIE.Silent = True
このコマンドが利いてくれれば面白いのですが。
三流君の...
》セキュリティの設定でJavaScriptなどをOFFにしてから巡回作業。
》そんな簡単なプロパティが無い。
》※あったら、マズイんだけど。。。
これは、やる気次第ですね。たぶんですが。
-------------------
なお、#3のコードのIEの宣言の
Dim NetObjeIE As Object
↓
Dim NetObjIE As Object
の間違いでした。
No.3
- 回答日時:
こんにちは。
今、コードを見てみましたが、ハングしているようにも思えませんが、ただ、コードの目的が良く理解できないのです。たぶん、これは、クローリング(データ取得)ではありませんね。
>url = "http://admin.blog.fc2.com/control.php?mode=edito …
FC2 のHTML のソースの中に、以下のような言葉が混じっています。
※ <クラスはオートメーションまたは予測したインターフェースをサポートしていません。
ということで、オートメーションでのアクセスは不可ということかな?ではなさそうですね。あまり細かく見ていないのですが、そのままではできないということになりそうです。
言い換えれば、
CreateObject("internetExplorer.application")
で、オートメーション・オブジェクトを作った時に、通常IE の持っていた登録情報などは使えたのかなっていうことです。フリーログインにした状態で、IE をShell から立ち上げても、私の方は、弾かれたので、以下のようなコードを考えてみました。
なお、
>Dim doc As HTMLDocument
今のコードの中で、これを使う部分がありますか? objIEを継続・維持している限りは、いらないような気がします。
'//
Const MADD As String = "メールアドレス"
Const MPASS As String = "パスワード"
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub TestIEObject()
Dim NetObjeIE As Object
Dim URL As String
Dim doc As HTMLDocument
Set netobjIE = CreateObject("internetExplorer.application")
URL = "http://admin.blog.fc2.com/control.php?mode=edito …
With netobjIE
.navigate URL
.Visible = True
Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
End With
Sleep 50 '気休め 'TimeValue 関数よりも軽いので、Sleep のほうがベター
With netobjIE
Dim myID
.document.getElementById("id").Value = MADD
.document.getElementById("pass").Value =MPASS
If .document.getElementsByTagName("INPUT")(2).Value = "ログイン" Then
.document.getElementsByTagName("INPUT")(2).Click
Else
MsgBox "ログインのボタンの状態が変わりました。", vbExclamation
Exit Sub
End If
Do While .Busy Or .ReadyState <> 4: DoEvents: Loop '画面の切り替わりを待つ
'** この後は分かりません。
'in_str = "ログイン FC2 - 無料ホームページ"
''Debug.Print InStr(IE.document.Title, in_str)
'If InStr(netobjIE.document.Title, in_str) > 0 Then 'ログインページなら
' Stop
'End If
End With
End Sub
ありがとうございます。
どうも、FC2のPRフレームが、特定のスポンサーの時、HPを読み込め無くてハング状態になるようです。(応答なし)
別のスポンサーの時は無問題。
こちらの JAVAかadobeのただソフトのバージョンかもう少し、詰めてみます。
コードはスマートで参考になります。
No.1
- 回答日時:
こんにちは
時間設定を設けたいのであれば、それをループから抜け出す条件に加えておくのが簡明だと思います。
>これでテストしたんですが
ご呈示のコードを見てみると、
>.BusyがFalseでもDO-LOOPをぬけてくれないのです
ということはないと思います。
ただし、抜けるタイミングが意図したものとは違うようになっているのではないでしょうか。
まず、Forループの中の分岐で i>40 なら抜けるというおつもりのようですが、ループ内では1≦i≦40に制御されていますから、i>40になることはありません。
従って、この条件分岐は機能しないことになります。
また、このループの中では他には分岐する処理がないので、Forループは必ず最後まで回るということになります。
ループ内にSleep(50)がありますので、このForループは2分以上(50×40回)はかかりますから、仮にその間に.Busyの値がFalseに変わったとしても、そのままループは継続されます。
その後、Do Wileで改めて.Busyが評価され、外側のループを抜けることになると思いますので、タイミングが悪いと反応が起こるまでに2分程度かかる可能性があります。
さらには、.Busy=Trueが続いた場合は、当然ながら無限ループになります。
最初に述べたように時間制限をそのままDo Wileの条件に加えたものを、簡略化して記述してみると以下のような感じになると思います。
timeOut = Now + TimeValue("00:02:00") '←2分後を設定
Do While .Busy = True And Now < timeOut
DoEvents
Loop
If .Busy = True Then
' タイムアウト時の処理
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
画面を強制的に再描画させる方法
-
VBAでIE操作で IEが 固まっ...
-
DoEventsが必要な理由について
-
Escキーを押すと、中断する時と...
-
WinAPI「MsgWaitForMultipleObj...
-
プログラミングについて。 1つ...
-
テキストボックスの名前に変数...
-
アセンブラによるウェイト(WAIT...
-
【VBA】全て空白のセルの列の非...
-
Javaでゲーム
-
UWSCの終了の仕方
-
GIFアニメをループさせたくない
-
pythonでファイルのコメント行...
-
タイマーを用いたプログラム
-
VBAで3秒だけ時間を止めたい
-
アクティブセルから、A列最終行...
-
VBA横データを縦にしたいです
-
Java 南京錠
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
GIFアニメをループさせたくない
-
プログラミングについて。 1つ...
-
エクセルの当番表を作っていま...
-
テキストボックスの名前に変数...
-
ループフリー
-
vb.netからエクセル関数書き込み
-
CSVファイルの特定の行だけを読...
-
VBA for i=1 to lastrow
-
どなたかこのプログラミングを...
-
Do whileでExitせず、ループの...
おすすめ情報