アプリ版:「スタンプのみでお礼する」機能のリリースについて

IE操作のVBAでF8キーを使いステップイン編集すると異常終了するようになってしまいました。
ステップイン編集中、①でF8を押して②が反転した瞬間「MicrosoftExcelは動作を停止しました 問題を解決しています」のダイアログが出て終了してしまいます。

Sub IE起動()

Dim IE As Object

①Set IE = CreateObject("internetExplorer.application")
②IE.Visible = True 
IE.navigate ("http://www.goo.ne.jp")

End Sub

ステップイン編集時のみ起こり、マクロボタンを作ってそこから実行すると普通に実行できます。
つい最近までは普通に編集できていました。症状に気付いたのは昨日からです。
環境はwindows7、EXCEL2013、IE11です。

どなたか対処法をご存知でしょうか。よろしくお願いします。

A 回答 (2件)

#1の回答者です。



>通過する瞬間、異常終了してしまいます。F5キーや実行ボタンでは普通に動作します。
おそらく、セキュリティのどこかに触れているのだろうと思います。

試してみると、こちらでは、エラーが出る場合とそうでない場合がありますが、私の場合は、いわば通過儀礼の部分をステップで追うということはしませんし、例えば、Active X コントロールをステップインするのと同じで、エラーは出ても、オートメーション・オブジェクトを生成する段階で、割り込みを入れてエラーが出ることに、あまり疑問を持ったことがありません。

ステップイン(F8)と、実行(run)との違いは、前者はインタープリタ型で、後者は、コンパイル(P-code)されていますから、ステップインとは必ずしも仕様自体が同じではありません。

ここ何度か、IE は、バージョンを挙げたようで、Microsoft 側では、さかんに、Microsoft Edge を使ってほしいような様子です。しかし、Edge をVBAで本格的に使うには、Selenium VBAを利用するということになりますが、思った以上に情報が豊富ではありません。

私の場合は、ステップインをする場合は、IEオブジェクトの横取りの方が多いと思います。そうしないと、IEオブジェクトだらけになってしまいます。(.Visible = True なら手動で終わらせますがキリがないですからね)

つまり、開いているIE画面からIEオブジェクトを、ShellWin
Set objShellWin = CreateObject("Shell.Application").Windows()
取って、それから、操作をするということです。単純に、そのobjShellWinから、IE オブジェクトを引き出してもよいのですが、複数のIEオブジェクトから目的のオブジェクトを取り出すには、テクニックが必要だと思います。
    • good
    • 0
この回答へのお礼

大変詳しい解説をありがとうございます。

お話が高度すぎて半分も理解できていないのですが、
>いわば通過儀礼の部分をステップで追うということはしませんし
これを参考に、エラーが出るコードの後ろにブレイクを作り、実行ボタンでブレイクまで進んでしまって、そこからステップインで動作確認という流れでなんとかしようと思います。(自分はまだ動作確認しながらでないとコードが書けない)

IEオブジェクトの使いまわしや開放のお話も大変参考になりました。
セキュリティも確認しておらず根本は解決していないのですが、とりあえず急場は凌げそうです。いろいろとご親切にありがとうございました。

お礼日時:2017/09/18 00:21

私の最近のマクロは、インターネットアクセスが中心ですが、



'//
 Dim objIE As SHDocVw.InternetExplorer '参照設定済みInternet Controls
 Dim strURL As String
 Set objIE = New ShDocVw.InternetExplorer
 strURL ="https://oshiete.goo.ne.jp/articles/qa/2817/"
'----Set in
 objIE.Navigate2 strURL 'Navigate だと、単独になる
 objIE.Visible = True 'なしでも可能
 Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
'-----Set out
'//
'●
このように、Set in - Set out は常に崩さないことです。ただし、Do - Loop間でエラーが発生した時のために、DoEvents は、ESC で抜けるために入っています。

本格的には、参照設定で、Internet Controls を使ったほうが安全です。
もし、ステップインにするなら、安定化した後●に、ブレークポイントを入れてくたさい。

ShDocVw.InternetExplorer は、古い書き方ですが、安定しているような気がします。
    • good
    • 0
この回答へのお礼

すぐにご回答いただきありがとうございます。

先に結論を書きますと、上記のマクロをコピーペーストしてステップインで実行しましても3行目、
Set objIE = New ShDocVw.InternetExplorer
を通過する瞬間、異常終了してしまいます。F5キーや実行ボタンでは普通に動作します。
Internet Controlsの参照設定は忘れており、ご指摘後に参照設定しました(汗)

お礼日時:2017/09/17 15:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!