alt要素が取得できない?IEをVBAで操作する際のaタグのalt要素の取得方法

このQ&Aのポイント
  • IEをVBAで操作する際に、aタグのalt要素の値は取得できません。
  • 上記のコードを実行すると、実行時エラー '438'が発生します。
  • aタグにalt要素があるかどうかを取得する方法を紹介します。
回答を見る
  • ベストアンサー

aタグにalt要素があるかどうかを取得するには

For Each myObj In objIE.document.all.tags("a") If myObj.alt = "文字" Then End If Next の様に、IEをVBAで操作する際に、altの値は取得できないのでしょうか? 実際上記のコードを実行すると 実行時エラー '438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 それともloop中のaタグにalt要素がないからエラーになっているのでしょうか? であれば、aタグにalt要素があるかどうかを取得するにはどうすればいいでしょうか? 出来ればIfステートメントで取得したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは myObj.alt を myObj.Title にするのはダメなのですか? alt 属性はimg、area、applet、inputに対して付くものでそれ以外には無い? 属性のようなので。 後は、On Error Resume Nextでスキップするとかでしょうか?

qdvzurnhz
質問者

お礼

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

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

http://www.vba-ie.net/element/image.html#a13 「altプロパティ」の項の説明の下の方にあるコード例を参考にして、ではできませんか。

qdvzurnhz
質問者

お礼

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

関連するQ&A

  • フレームを使ってるサイトはタグの取得はできない?

    フレームを使ってるサイトは、タグの取得はできないのでしょうか? vbaでieを操作をしていて、サイトにログイン後、 imgタグの中にあるaltの値を取得したいのですが、 For Each myObj In objIE.document.all.tags("img") Debug.Print myObj.alt Next これがスルーされてしまいます。 imgタグがいくつもあるのにスルーされてしまうし、imgタグだけでなくtdタグなどもすべてスルーされます。 その原因はサイトにフレームが使われてるからなのでしょうか? なぜか For Each myObj In objIE.document.all.tags("frame") Debug.Print myObj.Name Next なら値が取得できるんです。 For Each myObj In objIE.document.all.tags("form") Debug.Print myObj.Name Next はダメでした。 いつもなら、ソースにformタグがあれば、これで取得できるのですが・・・

  • objIE.Document.all.tags("

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Call IE_wait(objIE) objIE.Document.forms("center_searchform").elements("MT").Value = "教えて" For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索する" Then objIE.Document.all.tags("input").alt("検索する").Click ‘ココでエラー End If Next Set objIE = Nothing End Sub これを実行するとクリックできないのですがなぜでしょうか? オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) が表示されます。 他の方法で解決する事は出来ますが、 If myObj.alt = "検索する" Then が出来てるからこのままうまく行きそうな気がするのですが? 理由を教えてください。ご回答よろしくお願いします。

  • objIE.Navigate2 "http://.

    win8.1 エクセル2010です。 1ページ目でyahooのソースをチェックし、 2ページ目でグーグルのソースをチェックするにはどうすればいいでしょうか? **************************************************************** Option Explicit Dim objIE As InternetExplorer Sub test() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .navigate "http://www.htmllint.net/html-lint/htmllint.html" End With Call wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "http://www.yahoo.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next Call wait '表示が終わってないのに次のコードに進んでるっぽい objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next End Sub Sub wait() Do While objIE.Busy = True DoEvents Loop Do While objIE.readyState <> 4 DoEvents Loop End Sub **************************************************************** というコードを作ったのですが、 1ページ目のタブで、ヤフーのコードをチェックし、 2ページ目のタブで http://www.htmllint.net/html-lint/htmllint.html は表示できたのですが、 2ページ目のタブのボックスに myObj.Value = "https://www.google.co.jp/" を入れることができません。 しかし 上記のコードを実行してもエラーにはなりません。 2回目の For Each myObj In objIE.document.all.tags("input")は 何をループしているのかよくわかりません。 objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 で開いた二つ目のタブで For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next をやる方法を教えてください。

  • myObjにタグを格納してループはできない?

    MSXML2.XMLHTTPの時は、 myObjにタグを格納してループはできないのでしょうか? Sub test() Dim objIE As Object Dim myObj As Object Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://○○.html", False objIE.send For Each myObj In objIE.Document.all.tags("p") Next Set objIE = Nothing End Sub 上記だと実行時エラー438になります。 Set objIE =CreateObject("InternetExplorer.Application") でループしないとダメでしょうか? Set objIE =CreateObject("InternetExplorer.Application") は時間がかかるので、できれば Set objIE =CreateObject("MSXML2.XMLHTTP") でやりたかったのですが、タグを格納できないのでしょうか?

  • IE操作 ソース内のjavascriptを表示後、

    VBAでIE操作をしているのですが、 javascriptのURLを踏んだ後に、そのページをオブジェクトに格納して値の取得等をしたいのですが、 うまくいきません。 For Each myObj In objIE.document.all.tags("a") If myObj.href Like "*affiliateUrl1*" Then objIE.navigate myObj.href ' Call IE_wait Exit For End If Next 上記のコードで、 javascript:show_rakuten_linkcd('linkUrl1','imageUrl_S1','imageUrl_M1','title1','price1','reviewCount1','affiliateUrl1'); を見つけて、objIE.navigate myObj.href で、ページを表示することは出来たのですが、 Call IE_wait で Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub をすると、無限ループに入ります。 javascriptでページを表示させても、 objIEに格納されているURLは、javascriptを踏む前の元のページだからと思います。 なので、表示されるまで待つのは手動でやるとしたのですが、 その後、 For Each myObj In objIE.document.all.tags("testarea") If myObj.Name = "code" Then      ’ソース取得 End If Next とやろうとしても、objIEに格納されているURLがjavascriptで表示させているページでない為、 取得できません。 objIE.navigate myObj.href を実行した後に、javascriptのページ(小窓)を格納する方法があれば教えてください。 よろしくお願いします。

  • 食べログの検索結果をVBAで取得したいのですが

    食べログの検索結果をVBAで取得したいのですが 上手くいきません。 例えば、東京都の和食のお店の各お店のページのURLを取得しようと Sub tset() Dim strURL As String Dim objIE As InternetExplorer Dim myObj As Object strURL = "http://tabelog.com/tokyo/rstLst/washoku/" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate strURL Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each myObj In objIE.Document.all.tags("a") If myObj.class = "list-rst__rst-name-target js-click-rdlog" Then Debug.Print myObj.href End If Next End Sub としたのですが、 If myObj.class = "list-rst__rst-name-target js-click-rdlog" Then の部分で、 実行時エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 と言うエラーになります。 ソースを見ると tlst-1-pref-0-1-0-0-0-0-0-0-0-0-0-0-0-2-1/*-http://tabelog.com/tokyo/A1317/A131710/13014641/" class="list-rst__rst-name-target js-click-rdlog" data-adtype="add_info" data-advertise="shnm" data-onclick-sitecatalyst="rstlst_shnm" data-rd-url="http://rd.tabelog.com/DEV=p/POS=shnm/RCD=13014641/TYPE=add_info/COND=rstlst-1-pref-0-1-0-0-0-0-0-0-0-0-0-0-0-2-1/*-http://tabelog.com/tokyo/A1317/A131710/13014641/">郷土料理おいどん 不動前店</a> なので、 "list-rst__rst-name-target js-click-rdlog" でしぼってsのURLを取得すればいいと思ったのですが なぜエラーになるのでしょうか?

  • 検索ボタン押下時に、検索ボックスに入れた値が消える

    ie操作ですが、 検索ボックスに文字を入れて、検索ボタンを押すことは出来たのですが 検索ボタン押下時に、検索ボックスに入れた値が消えてしまい、結局何も検索ボックスに入れてない状態で検索されてしまいます。 検索ボックスに値を入れても文字の色が灰色です。 手作業で検索ボックスに文字を入れると黒で表示されます。 コードはこちらです。 Sub ヒトサラ() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://hitosara.com/" Do While objIE.Busy = True DoEvents Loop For Each myObj In objIE.Document.all.tags("input") If myObj.Name = "keyword" Then myObj.Value = "検索文字" Exit For End If Next For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索" Then myObj.Click Exit For End If Next End Sub myObj.Value = "検索文字" これが間違ってる気がするのですが どのように修正すればよいでしょうか?

  • vbaでnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • vba ie操作 検索後のタイトルが取得できない

    vba ie操作 ヤフーファイナンス 検索後のタイトルが取得できない win8、エクセル2010です。 ヤフーファイナンスで会社名を検索して、その後のコードを取得したいのですが その場合、タイトルに企業コードがあるので、その文字を取得しようとしたら、 検索前のページが取得されてしまいます。 ------------------------------------------------------------ Dim objIE As New InternetExplorer Sub test() Dim str企業名 As String Dim myObj As Object str企業名 = "ホテルオークラ" Set objIE = CreateObject("InternetExplorer.application") With objIE .navigate "http://finance.yahoo.co.jp/" .Top = 0 .Left = 0 .Width = 1000 .Visible = True End With Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchText" Then myObj.Value = str企業名 Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchButton" Then myObj.Click Call IE_wait Exit For End If Next Debug.Print objIE.document.Title Set objIE = Nothing End Sub ----------------------- Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------------------------------------------ というコードなのですが 検索語の2ページ目は 「(株)京都ホテル【9723】:株式-株価 - Yahoo!ファイナンス」 というタイトルなのに 1ページ目と同じ 「Yahoo!ファイナンス - 株価やニュース、企業情報などを配信する投資・マネーの総合サイト」 が返ります。 なぜ次のページのタイトルが取得できないのでしょうか? 画面上IEブラウザには2ページ目が表示されています。

専門家に質問してみよう