Excel2013のVBAからInternetExplorerを操作するとリンク先ページの操作ができない

下記の参考プログラムのように

Navigateで開いたページ(Yahooのトップページ)から

リンク先のページ(Yahooファイナンス)に移動しても

オブジェクト(ObjIE)の内容がYahooのトップページのままで

リンク先のページの内容にならず、処理がうまくいかない。


別PCですがExcel2010では意図したとおりに実行できました。



以下参考実行プログラム

--------------------------------------------------------------------------------------------------------------------------------

  Dim ObjIE As Object  '変数を定義
  Dim Obj As Object    '変数を定義


  Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub IE_open()
 
  j = 0
 
  Set ObjIE = CreateObject("InternetExplorer.Application")  'IEを開く際のお約束
  ObjIE.Visible = True                                      'IEを開く際のお約束
  ObjIE.Navigate "http://www.yahoo.co.jp/"                  '開きたいサイトのURLを指定
 
  Do While ObjIE.ReadyState <> 4                            'サイトが開かれるまで待つ(お約束)
    Do While ObjIE.Busy = True                              'サイトが開かれるまで待つ(お約束)
    Loop
  Loop
 
  For Each Obj In ObjIE.document.getElementsByTagName("a")  '表示されているサイトのアンカータグ一つずつを変数objにセット
                              '各アンカータグ単位に以下の処理を実施
    If Obj.innerText = "ファイナンス" Then                  'アンカータグの表示内容が「ファイナンス」の場合に以下の処理を実施
      Obj.Click                                             '上記に該当するタグをクリック
      Exit For                                              '上記処理後、For Each ~ Nextを抜ける
    End If
  Next                                                      '次のタグを処理

  Sleep (1000)                                              '1秒待つ
 
  Do While ObjIE.ReadyState <> 4                            'サイトが開かれるまで待つ(お約束)
    Do While ObjIE.Busy = True                              'サイトが開かれるまで待つ(お約束)
   
    Loop
  Loop
 
  For Each Obj In ObjIE.document.getElementsByTagName("input")  '表示されているサイトのinputタグ一つずつを変数objにセット
                                                                '各inputタグ単位に以下の処理を実施
    If Obj.ID = "searchText" Then                           'タグのid名が「searchText」の場合、以下の処理を実施
      Obj.Value = "任天堂"                                  'テキストボックスに「任天堂」を挿入
    Else
      If Obj.ID = "searchButton" Then                       'タグのid名が「searchButton」の場合、以下の処理を実施
        Obj.Click                                           '該当のinputタグをクリック
        Exit For                                            '上記処理後、For Each ~ Nextを抜ける
      End If
    End If
  Next                                                      '次のタグを処理
End Sub


 

質問情報


最終更新日 2019年8月21日 表示 10,623 適用先:

プログラムは問題なさそうですね。

私は8.1の環境は作ってませんが、

Win7+Excel2013

Win8+Excel2013

で問題なく動くようです。

IEのバージョンも書かれた方が良いと思います。

 

ただ、この手の操作は結構不安定で、私も類似のIE操作のものをいくつか作ってますが、

XP⇒Vista⇒Win7

とバージョンが変わるたびに動かなくなり、Waitの時間を調整したものがあります。

(Waitを長くすると動いたケースもあります)

中にはWin7でどうしても動かないものがあり、面倒なのでそれ以上追及してません。

 

参考まで。

 

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

y sakuda さん、いつもアドバイスありがとうございます。
kouhei-kun さん、こんにちは。
マイクロソフト コミュニティをご利用いただき、ありがとうございます。

y sakuda さんもコメントされていますが、バージョン変更ごとに動作で変わってくる点などについては、実際にプログラムを組んで確認されている方からのほうが、よりアドバイスが集まりやすいと思います。

VBA 専門の VBA フォーラムがあるので、そちらにも投稿してみると経験豊富な方からのコメントが多く集まると思うので、こちらで情報を収集してみるというのも良さそうです。

Visual Basic for Application (VBA)

投稿される場合は y sakuda さんのアドバイスにもあるように、 Internet Explorer のバージョンも書き込んで投稿してみるとよいと思います。

よろしければ活用してみてください。
大沢 孝太郎– Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

回答ありがとうございました。


Excel2013でも動作することがわかり助かりました。

別の切り口で原因を調べてみます。


IE11を使用しています。


この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

私も以前から同様の現象に悩まされていました。

windows8.1(64bit)+excel2013+ie11の組み合わせのみで起こるようです。32bitでは起きないようです。

そのため、8.1マシンはie10で使っていました。またwin8マシンはそのままで。

しかし、最近のアップデートでieが強制的に11へ更新され、一部のマシンでvbaが動かなくなってしまい、非常に困窮しております。

Dim objIE As Object
 f = 0
 asn = ActiveSheet.Name
     'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
     objIE.Visible = True '見えるようにする(お約束)
        objIE.Navigate "http://auctions.yahoo.co.jp/jp/show/discussion?aID=xxxxxx&u=%3bxxxxxx#discuss"
     '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
     Do While objIE.readyState <> 4
         DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
   
 Application.Wait [NOW()+"0:00:01.0"]
     For Each objTAG In objIE.document.Forms(f) '構成要素を1つ1つ取り出す
        '名前がKUBUN で 値がVBAのデータを探す
        If objTAG.Name = "comment" Then '見つかったか?
            objIE.document.Forms(f).Item("comment").Value = "有難う御座いました。" '旧タイプ
            old = True
             Exit For '探し終わったのでループを抜ける
        End If
     Next
   
 objIE.document.Forms(f).submit '送信処理1
   
   
     '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
     Do While objIE.readyState <> 4

※ここで止まってしまいます。

          DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
 objIE.document.Forms(f).submit '送信処理2

   
     '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
     Do While objIE.readyState <> 4

        DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
   
     objIE.Quit 'コメントにして処理しない(残しておいた方がテスト時は楽です)
     Set objIE = Nothing  
    

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

さま さん、こんにちは。
マイクロソフト コミュニティに投稿いただき、ありがとうございます。

Excel 2013 で VBA から Internet Explorer の操作ができない問題でお悩みなのですね。

32 ビット OS では発生しないということなので、該当しそうな設定として、インターネット オプションの拡張保護モードの設定が有効かもしれません。

外しているかもしれませんが、インターネット オプション > [詳細設定] タブ > 「拡張保護モードで 64 ビット プロセッサを有効にする」 と [拡張保護モードを有効にする] にそれぞれチェックを入れて動作を確認してみるとよいかもしれません。

また、使用している Excel は 32/64 ビットどちらでインストールしているのかも解るとよいので、こちらも追加で書いてみるとよいと思います。

追加の返信をお待ちしています。
大沢 孝太郎– Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

大沢 孝太郎様

早速のご回答有難う御座います。

上記2か所、チェックをれてみましたけれど、やはり同じでした。

Do分の中で無限ループに陥ります。

DoEventsを繰り返しているだけです。

excelも64bitです。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

さま さん、こんにちは。

拡張保護モードの設定は効果が見られなかったのですね。

DoEvents を繰り返されるような動作になるということなので、 VBA のコードに何か修正や変更などが必要なのでしょうかね。。

あまりお力になれなくてすみませんが、このスレッドで紹介させてもらっている VBA フォーラムにコードと Excel のバージョンを書きこんで質問を投稿してみてはいかがでしょうか。
もしかすると同じような経験をお持ちの方からも、アドバイスが得られるかもしれません。

せっかく質問を投稿いただいたのにお手数ですが、検討なさってみてください。

大沢 孝太郎– Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

ありがとうございます。

質問投稿してみました。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。