Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Access 2016)
IE操作で複数のタブで検索したいが、エラー発生する
投稿日時: 19/05/05 13:02:31
投稿者: 縞縞縞

いつも大変お世話になっております。
VBAでIE操作を行いたいのですが、エラーが表示されて困ってます。
コードのどこを修正してよいかわかりません。教えて頂けませんでしょうか。
よろしくお願いいたします・
 
【行いたいこと】
 (1) IEを開く。
 (2) 検索するURLを開き、文字Aを検索する。
 (3) 新しいタブ(URL)を開き、文字Bを検索する。
 
【困っていること】
 ・下記コードを実行すると、「実行時エラー:91」で下記コードの【停止】で止まります。
 ・下記コードは、文字Aを検索できます。しかし新しいタブを開いた後、次に検索したい
  文字Bは、新しいタブの検索欄に記載されません。
  文字Aを検索した(旧)タブの文字が、文字Aから文字Bに入れ替わってしまいます。
 
【コード】
Private Sub 検索コマンド_Click()
 
 'IEの起動
  Dim htmlDoc As HTMLDocument
  Dim objIE As InternetExplorer
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Visible = True
     
 '検索するURLを開く
  objIE.Navigate2 "https://www.google.com/"
   
 'Webページが読込完了まで待機-1
  Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
     DoEvents
  Loop
  
 '検索実行-1
  Set htmlDoc = objIE.Document
  htmlDoc.getElementById("q").Value = "文字A"
  htmlDoc.getElementById("btnK").Click
 
 '新しいタブで検索するURLを開く
  objIE.Navigate2 "https://www.google.com/", &H800
 
 'Webページが読込完了まで待機-2
  Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
     DoEvents
  Loop
  
 '検索実行-2
  Set htmlDoc = objIE.Document
  htmlDoc.getElementById("q").Value = "文字B"
  htmlDoc.getElementById("btnK").Click ← 【停止】実行エラー:91
 
End Sub

回答
投稿日時: 19/05/07 13:52:37
投稿者: Suzu

縞縞縞 さんの引用:
'新しいタブで検索するURLを開く
  objIE.Navigate2 "https://www.google.com/", &H800
 
 'Webページが読込完了まで待機-2
  Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
     DoEvents
  Loop
 
 '検索実行-2
  Set htmlDoc = objIE.Document

 
この段階の、アクティブなタブは、新規タブかもしれませんが、
それは、objIEと一致しません。
 
この段階で objIE.Document にて、得られるのは "文字A" のタブです。
ですので、操作としては、元のタブに対し 文字Bを代入しています。
さらに、新規画面の 「btnk」を押そうとしているのでしょうが、
文字Aの検索結果のタブには、そもそも btnk がないのでエラーとなります。
 
VB InternetExplorer タブ とでもして検索してみましょう。

トピックに返信