• 締切済み

VBAでgetElementByTagName

VBAでIEを動かそうとしている初心者です。 For Each a In ie.Document.getElementByTagName("A") で実行時エラー'438':オブジェクトは、このプロパティまたはメソッドをサポートしていません となるのですがなぜでしょうか Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True '画面へ移動する ie.Navigate "http://www.forest.impress.co.jp/" waitNavigation ie Dim a As Object Dim urls As New Collection For Each a In ie.Document.getElementByTagName("A") urls.Add a.href Next

みんなの回答

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.3

> getElementsByIdでも同じメッセージが出ます。 getElementByIdというメソッドはありますが、getElementsByIdというメソッドはありません。 getElementById → 単一の要素を返すので単数形(Element) getElementsByTagName → 配列を返すので複数形(Elements) 打ち間違えはありませんか? 以下を【コピペして】試してください。 For Each a In ie.Document.getElementsByTagName("A") urls.Add a.href Next

tsujihara
質問者

お礼

コピペしたら、動きました。打ち間違えでしょうか。 ありがとうございました。

回答No.2

waitNavigation ie が不明なので再現できませんでした。 waitNavigation ie を Stop に置き換えて画面表示が完了してから続行すると正常に完了しました。 waitNavigation ie をコメントにして実行すると、「オートメーション エラー」になりました。 参考までに。

tsujihara
質問者

補足

stopに変えて、継続するとやはり同じエラーが出ます。windows7 32BIt Excel2010です。何か特別な 初期設定が必要なのでしょうか、よろしくお願いします

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

メソッド名が間違っています。 × getElementByTagName ○ getElementsByTagName

tsujihara
質問者

補足

訂正しましたが、やはり同じメッセージが出てきます。getElementsByIdでも同じメッセージが出ます。何か設定があるのでしょうか。

関連するQ&A

  • VBのコードが理解できません 解説いただけないでしょうか?

    Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then  WinExist = True  Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True このコードを解説いただけないでしょうか? 特に WinExist For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then が何をしているのか分からないんです。

  • Aa

    Microsoft Internet Controlsの参照設定 Option Explicit Sub テキストボックス操作() Dim ie As InternetExplorer Dim txtInput As HTMLInputElement Dim txtOutput As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-2.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Set txtInput = ie.document.getElementById("Text1") MsgBox txtInput.Value Set txtOutput = ie.document.getElementById("Text2") txtOutput.Value = "VBA からの書き込み" End Sub Sub ラジオボタンの操作() Dim ie As InternetExplorer Dim radio1 As HTMLInputElement Dim radio2 As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-6.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each radio1 In ie.document.getElementsByName("Radio1") If radio1.Checked = True Then MsgBox radio1.Value Exit For End If Next For Each radio2 In ie.document.getElementsByName("Radio2") If radio2.Value = "女" Then radio2.Checked = True Exit For End If Next End Sub Sub ハイパーリンクをクリック() Dim ie As InternetExplorer Dim anchor As HTMLAnchorElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-7.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each anchor In ie.document.getElementsByTagName("A") If anchor.innerText = "やきそばパン vs 揚げパン" Then anchor.Click Exit For End If Next End Sub Sub ボタンをクリックボタン2() Dim ie As InternetExplorer Dim button As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-8.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each button In ie.document.getElementsByTagName("INPUT") If button.Type = "button" And button.Value = "ボタン2" Then button.Click Exit For End If Next End Sub

  • VBAのdictionaryでAddの使い方

    VBAでつぎのコードを実行すると、a,A1.1の後、a,A2.2と表示します。 dicには、a,A2.2の設定をしていないのになぜこうなるのでしょうか? どなたか教えてください。 Sub sample() Dim dic As Object Dim subDic As Object Set dic = CreateObject("Scripting.Dictionary") Set subDic = CreateObject("Scripting.Dictionary") subDic.Add "A1", 1 dic.Add "a", subDic subDic.Add "A2", 2 '結果表示 Dim key1 As Variant Dim key2 As Variant For Each key1 In dic.keys For Each key2 In dic(key1).keys MsgBox key1 & "," & key2 & ". " & dic(key1)(key2) Next Next End Sub

  • VBAで起動しているIEの操作

    IEでOKWAVEを開いていたら イミディエイトウィンドウに タイトルを表示するのに 次の 記述をしましたが エラーになりました。 実行時エラー '-2147467259 (80004005)': 'Document' メソッドは失敗しました: 'IWebBrowser2' オブジェクト なぜでしょうか? IEは11です。 エクセルは2013 OSは windows7 ホームプレミアム vbsは次の通り Sub okwave() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows If TypeName(win.document) = "HTMLDocument" Then If InStr(win.document.Title, "okwave") > 0 Then Set objIE = win Exit For End If End If Next Debug.Print objIE.document.Title End Sub

  • VBAのIE操作でclickがうまくいきません

    自動ログインのマクロを他の人のパソコンで使おうとしたとき、正常に動くパソコンと途中で動かないパソコンがありました。 インターネットを起動してリンク画像をクリックしたいのですが、数台のパソコンでクリックのところが何も動作せずエラーも出ないまま次の行に行ってしまいます。 VBAの参照設定やバージョン、インターネットオプションの詳細設定など色々見てみたのですが原因がわかりません。 もし同じような症状が出た方がいらっしゃればご教授頂けたら有難いです。 Sub test() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") With ie .Visible = True .Navigate ("http://www.google.co.jp/") set tep = .document.getElementsByTagName("img") For Each tmp2 In tmp If tmp2.alt = "Click" then tmp2.Click'←ここが反応してくれません Exit For End If Next End With End Sub

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • WinXP,7のIE8にて新規セッションで起動

    VBAを使用してWebサイトにログインを行いたいのですが、ログインをする際に必ず新規セッションでウィンドウを起動してログインするようにするにはどのようなコードを組めばいいのでしょうか? 下記のようなコードで現在は動かしているのですが、explore.exe -noframemergingで起動すれば新規セッションでIEを開けるとのことだったのですが、上手く組み込むことができません・・・。 どのようにすれば上手く動くのでしょうか・・・。 申し訳ありませんがどなたかご教授願います。 '========================================= sub ろぐいん() '変数 Dim IE As Object Dim UserID As String Dim UserPass As String 'ID,PASS設定 UserID = "ID" UserPass = "PASS" 'IE起動 Set IE = CreateObject("InternetExproler.Application") IE.Visible = True '接続 IE.navigate "http://" '文字入力 IE.document.gatelementbyid("ID").Value = UserID IE.document.gatelementbyid("PASS").Value = UserPass '送信 Call IEButtonClick(IE, " 送信 ") Set IE = Nothing End Sub 'クリック Public Function IEButtonClick (ByRef IE As Object, ButtonValue As String) Dim ObjInput As Object For Each ObjInput In IE,document,getelementsbytagname("INPUT") If ObjInput,Value = ButtonValue Then ObjInput,Click Exit For End If Next End Function '=========================================

  • VBAでMicrosoft Edgeから開く方法

    ExcelVBAマクロについて確認させてください。 これは「Internet Explorer(IE)」になっているので「Microsoft Edge」また「Google Chrome」ソフトに変更する場合はどのように変更すればよいかご教授くださいm(_ _)m 下記のプログラムの具体的な仕様 1)現在開いているInternet ExplorerのWebサイトアドレスをA1セルから順に出力する。 2)A1セルに主力したWebサイトアドレスを一つずつ開いて、閉じる。 Sub test() '現在開いているURLの取得 Dim sh As Object Dim win As Object Dim buf As String Dim i As Integer Dim n As Integer Dim strUrl As String Set sh = CreateObject("Shell.Application") For Each win In sh.Windows 'ウインドウの数だけ回す If win.Name = "Internet Explorer" Then buf = buf & " " & win.LocationURL End If Next '空白毎に区切ってセルに代入 Worksheets(1).Range("A1").Resize(UBound(Split(Trim(buf), " ")) + 1).Value = WorksheetFunction.Transpose(Split(Trim(buf), " ")) i = Worksheets(1).Cells(1, 1).End(xlDown).Row '現在開いているURLの数を取得 For n = 1 To i strUrl = Worksheets(1).Cells(n, 10) '文書策定画面を文字列strUrlに代入 'IEオブジェクトを作成 Dim ie As InternetExplorer Set ie = New InternetExplorerMedium 'IEを表示(見えるようにする) ie.Visible = True '指定したURLをIEで開く ie.navigate strUrl 'サイトの読み込みが完了するまで待つ Do While ie.Busy = True Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop 'オブジェクトを閉じる ie.Quit 'メモリからオブジェクトを破棄 Set ie = Nothing Next n End Sub

  • EXCEL VBAからIEを起動する際のバージョンについて

    下記コーディングでEXCELのVBAよりIEを起動する際、IE5.0では正常に動作するのですが、他のバージョン(IE5.5等)ではうまく起動出来ません? 良い解決策があれば教えていただきたいのですが。 Dim IE As Object Dim URL As String Set IE = CreateObject("InternetExplorer.Application") URL = "ftp://XXXXXXXX/999/" With IE .Navigate2 URL .Visible = True .Height = 400 .Width = 400 .Top = 0 .Left = 0 End With Windows98/Excel2000

  • 二つのタブを開き、二つ目のタブに対して、操作し

    vbaのie操作で 一つ目はタブはグーグルメール 二つ目のタブはドコモメールを開きたいのですが、 ドコモメールはPWをVBAで入れないと進めないので入れたいのですが Sub test() Dim myObj As Object Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .Navigate "https://mail.google.com/mail/u/0/?pli=1#inbox" ’グーグル End With objIE.Navigate2 "https://mail.smt.docomo.ne.jp/mail/#fid=10000000&page=1", 2048 ’ドコモ For Each myObj In objIE.document.all.tags("input") If myObj.ID = "persistent" Then myObj.Value = "PW" Exit For End If Next Set objIE = Nothing End Sub だと、 For Each myObj In objIE.document.all.tags("input") は、グーグルメールを参照しています。 LocationURLを見てみたら、 "https://mail.google.com/mail/u/0/#inbox" になっていました。 このように、二つのタブを開き、二つ目のタブに対して、操作したい場合 どうすればいいでしょうか?

専門家に質問してみよう