人に聞けない痔の悩み、これでスッキリ >>

ExcelのVBAでIEの制御をいていますが、getElementsByClassNameで「実行時エラー'438':オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となります。

古いIEではgetElementsByClassNameはサポートされていなかったようですが、当方の実行環境はつぎのとおりです。

Windows 7 Pro. 64bit SP1
Excel 2007(VBA 6.5)
IE10

なお、getElementByIdとかは使用できています。
解決方法をご教示して頂きたくよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

#1~4です



ご提示のページを開き、下記コードを実行した結果は

2
0 stoksPrice realTimChange innerText=
1 stoksPrice innerText= 803


でした。
classname="stoksPrice realTimChange" もヒットして(仕様?バグ?)、そのinnterTextは空ですので取得出来ていない様に見えたのでしょう。
ie.document.getElementsByClassName("stoksPrice")(1).InnerTextなら良いかと思いますが、問題のページのソースを見てご検討願います。

'Microsoft Internet Control
'Microsoft HTML Object Library
'に参照設定

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Sub test()
Dim ie As InternetExplorer
Dim myElements As IHTMLElementCollection
Dim myElement As IHTMLElement
Dim i As Long

Set ie = getTopIeTab
If ie Is Nothing Then Exit Sub
Set myElements = ie.document.getElementsByClassName("stoksPrice")
Debug.Print myElements.Length
For Each myElement In myElements
Debug.Print i, myElement.className & " innerText= " & myElement.innerText
i = i + 1
Next myElement
Set ie = Nothing
End Sub

'IEの最前面Tabを取得
Function getTopIeTab(Optional matchWord As Variant) As InternetExplorer
Dim hWnd As Long
Dim ie As InternetExplorer
Dim targetIe As InternetExplorer
Const IEClassName As String = "IEFrame" 'IEのClass名

hWnd = FindWindow(IEClassName, vbNullString)
For Each ie In CreateObject("Shell.Application").Windows()
If hWnd = ie.hWnd Then
ie.StatusBar = True
ie.statustext = CStr(hWnd)
If ie.statustext = CStr(hWnd) Then
If IsMissing(matchWord) Then
Set getTopIeTab = ie
ie.statustext = ""
Exit Function
Else
If InStr(ie.LocationURL, matchWord) > 0 Then
Set getTopIeTab = ie
Exit Function
End If
End If
End If
End If
Next ie
Set getTopIeTab = Nothing
End Function
    • good
    • 0
この回答へのお礼

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

ie.document.getElementsByClassName("stoksPrice")(1).InnerTextで期待する結果を得ることができました。

数年前に定年退職し自分で使うアプリを必要に駆られて、その都度VBAやVB.NETで作るようにしています。体系的にVBを勉強をしたことがなく、全くその基礎ができてなくて何時まで経っても初心者を卒業することができないでいます。そんな中、No.2の回答のデバッグにおけるVBEの使用法は特に勉強になりました。

今回、ご親切に分かりやすく最後まで解決に導いて頂きただだだ感謝あるのみです。重ね重ねありがとうございました。

お礼日時:2014/03/02 00:04

#1~3です。


#3で提示したようなデータでは取得できているので(最後の</html の">"が無いのはコピペミスです)原因がつかめません。
誰でもアクセスできるWebページであればURLを教えていただければ試してみても良いですが、ログインが必要なものではそういう訳にもいきませんね。

この回答への補足

度々ありがとうございます。

可能であれば下記のURL(Yahoo!ファイナンシャルのトップページ)で試して頂ければ幸いです。ログインは不要です。

http://finance.yahoo.co.jp/

表示画面の上部にあるテキスト欄には、株式銘柄コードとして例えば6501を入力して、その右の黄色の[株価検索]ボタンをクリックして頂ければ、問題のHTMLソースの画面になります。

よろしくお願い致します。

補足日時:2014/03/01 21:07
    • good
    • 0

#3です。


下記の様なしょうも無いコードですが思わぬ深みにはまってしまいました。
(参照設定版のコードですが、いろいろと省略してあります)
Sub test()
Dim ie As InternetExplorer

Set ie = New InternetExplorer
ie.Visible = True
ie.navigate "http://www.hoge.jp/test.html"
' ie.Visible = True
Do While ie.Busy = True Or ie.readyState <> 4
Sleep 50
DoEvents
Loop
'ここだけ見ていただければ結構です
Debug.Print ie.document.getElementsByClassName("stoksPrice")(0).FirstChild.NodeValue
ie.Quit
Set ie = Nothing
End Sub

テストに使ったtest.html
<html><head></head><body><table><tr><td class="stoksPrice">5,258</td></tr></table></body></html

以下は備忘録ですが、
1.ローカルに置いたhtmlファイルでは動作しない。ie.readyStateのあたりでエラーになってしまう。
2.文字列変数にhtmlを入れて、HTMLDocumentにWriteして処理しようとすると、getElementsByTagNameは機能しますが、getElementsByClassNameはメンバが無いというエラーになってしまう。
仕方が無いので自分のホームページのサーバーにアップロードして試しました。(^^;)

この回答への補足

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

問題のステートメントの最後部の.innerTextを.FirstChild.NodeValueに修正しましたが、.innerTextの時と同様に何も取得できませんでした。環境の違いの影響でしょうか?

ずっとVBA初心者にお付き合い頂き大変恐縮しています。

補足日時:2014/03/01 19:57
    • good
    • 0

#1です。


Microsoft Internet Control
Microsoft HTML Object Library
に参照設定して、VBEのオブジェクトブラウザでMSHTMLのメンバを眺めてみて下さい。
>Function getElementsByClassName(v As String) As IHTMLElementCollection
> MSHTML.HTMLDocument のメンバー
とある様に、getElementsByClassNameで得られるのはCollectionです。
また、
>Property innerText As String
> MSHTML.IHTMLElement のメンバー
であり、IHTMLElementCollectionにはinnerTextのプロパティは無く、エラーになります。

従って、http://oshiete.goo.ne.jp/qa/8410220.htmlでやっている様にループを回して取得する必要があります。
明らかに一個しかヒットしないなら、
ie.Document.getElementsByClassName("stoksPrice")(0).innerText
でも良いかもしれません。(未検証ですが)

この回答への補足

またまた、ありがとうございます。

お教え頂きましたように下記のとおり修正してエラーが起きなくなりましたが、5,258がセルにセットされません。

修正前: ie.Document.getElementsByClassName("stoksPrice").innerText
修正後: ie.Document.getElementsByClassName("stoksPrice")(0).innerText

よろしくお願い致します。

補足日時:2014/03/01 01:39
    • good
    • 0

当方Win7Home64bit、IE10、xl2010-32bitですが、


下記コードのgetElementsByClassNameは動作しています。
http://oshiete.goo.ne.jp/qa/8410220.html

他に原因があるのでは?
コードを開示されてはいかがでしょうか。

この回答への補足

早速回答頂きありがとうございます。

ご提示頂きましたgetElementsByClassNameを使用したコードは、問題なく実行できました。
どうも私のコードに問題があるようです。

やりたいことは、下記のHTMLソース中の5,258を下記のVBAステートメントでセルに取り込むことです。

</td>
<td class="stoksPrice">5,258</td>

Range("B10").Value = ie.Document.getElementsByClassName("stoksPrice").innerText

上記ステートメントでエラーとなっています。修正方法をお教え下さい。

補足日時:2014/02/28 23:17
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QWebページ中の javascript をVBAから実行するには

VBAで objIE を使用して Webページ中の javascript を実行したいのですが、
onclick="~~" の記述がないケースがあり困っております。
例えば以下のような記述です。

<a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>

onclick の記述がない上記のようなケースでは、javascript の呼び出しはどのようにすればよいのでしょうか?
不可能でしょうか?

Aベストアンサー

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますから、まず最初に、ダメ元で、
id名.Click を一度試してみます。もしくは、この行の上部のコードのオブジェクトのClass名のオブジェクトのひとつから、ヒットさせようとします。

そこでダメなら、ということで、ken3の内容に入るのですが、この著者の結論(正解)は、

ご質問に沿って書くと
For i =0 To objIE.Document.links.Length -1
If objIE.Document.links(i).href ="javascript:;" Then '文字の比較は、大文字・小文字がある
   objIE.Document.Links(i).Click
End if
Next i

ということになっています。私は、このコードは少し古臭く感じます。

ここで、ken3 の所では、Testサイトを用意してくれているので、試してみましたが、ダイレクトでサイトがとれている限りは、やはり、

Testサイト:http://www.ken3.org/vba/test170f.html

 objIE.Navigate "javascript:xxxxx;"

が利くことが分かりました。ただし、実際は、ここで時間待ちをしなくてはならないでしょう。
解説は、フレームからですので、うまく行かなかったようです。

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますか...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBAでキーワード検索

EXCEL(テキスト可)内に書かれた大量のキーワードを
1ワードずつ自動でGoogle検索し、
1ページ目の検索結果のリンクを1つ1つクリックしていき、
検索結果ページ内に、目的の情報があれば取得し、
EXCEL(テキスト可)に出力するといった操作を
VBAで自動で行いたいと思っています。

EXCEL2010かEXCEL2000に対応していればOKです。
検索するところまでは分かりましたが、検索結果(1ページ目のみ)
のリンクをクリックして、ページ内の目的の情報を取得する
といったところをどう記述すればよいかが分かりません。

検索するところまではこことほぼ同じように書きました。
http://vbaie.blog111.fc2.com/?mode=m&no=6

お分かりになる方、アドバイスのほど、よろしくお願いします。

Aベストアンサー

ちょうど正月休みでJavaScript - DOMのお勉強をしていましたので、試しにやってみました。
当方の環境(Win7Home64bit、IE10、xl2010-32bit)の環境ではお示しのコードは動きませんでした。
ソース(ページの見た目の割にとんでもなくごちゃごちゃしたソースで、自作のWebのTreeをワークシートに書き出すVBAコードを使って解析しました)を見ると、検索窓のIDや、「Google 検索」のタグも変わっている様でした。Googleさんの気分で時々変わるとすると、自力で作成できる様にお勉強していただくしかないと思います。下記で使用したidやclassnameも明日には変わっているかもしれません。
検索結果の最初の1ページ(10件分)のリンク-これも訳の分からない他のリンクが山ほど存在していて、正規表現による取得ではNGと思います-を取得して、5秒ごとにリンク先のページを表示するというところまでやってみました。ここまでで、自分の勉強に戻ります。ご参考まで。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'Googleで「VBA」と検索する
Sub GoogleSearch()
Dim objIE As Object
Dim myElements As Object
Dim i As Long
Dim urls() As String

'IE起動
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
'Googleに接続
objIE.navigate "http://www.google.co.jp"
'IEを待機
Call IEWait(objIE)
'検索窓に「VBA」と入力
objIE.document.getElementById("gbqfq").Value = "VBA"
'1秒停止
Sleep 1000
'検索ボタンを押す
objIE.document.getElementById("gbqfb").Click
'IEを待機
Call IEWait(objIE)
Sleep 1000
Set myElements = objIE.document.getElementsByClassName("altcts")
ReDim urls(0 To myElements.Length - 1)
For i = 0 To UBound(urls)
urls(i) = myElements(i).NextSibling.FirstChild.href
Next i
'取得したリンク先を表示する
For i = 0 To UBound(urls)
objIE.navigate urls(i)
Sleep 5000
Next i

'IE終了
' objIE.Quit
' Set objIE = Nothing
End Sub

'IEを待機する関数
Function IEWait(ByRef objIE As Object)
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Loop
End Function

ちょうど正月休みでJavaScript - DOMのお勉強をしていましたので、試しにやってみました。
当方の環境(Win7Home64bit、IE10、xl2010-32bit)の環境ではお示しのコードは動きませんでした。
ソース(ページの見た目の割にとんでもなくごちゃごちゃしたソースで、自作のWebのTreeをワークシートに書き出すVBAコードを使って解析しました)を見ると、検索窓のIDや、「Google 検索」のタグも変わっている様でした。Googleさんの気分で時々変わるとすると、自力で作成できる様にお勉強していただくしかないと思います...続きを読む

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QVBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。
正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。
タグごと抽出する方法でも構わないので教えてください。

例えば
<a href="www.yahoo.com△">○○○</a>   ・・・<1>
※△は(www.yahoo.com)+(半角数字1文字)
※○○○は1文字以上の全角文字

このようなパターンの文字列(<1>を丸ごと)を抜き出すには
どのような正規表現を書けばよいでしょうか?
単に<a href ではじまって </a>  で終わる文字列であれば
<a href.*</a>
で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので
ぜひ実現させたいと思っています。宜しくお願いします。

Aベストアンサー

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Length - 1
    Cells(i + 1, 1) = .Links(i).outerHTML
    Cells(i + 1, 2) = .Links(i).outerText
   Next
  End With
 End With
 objIE.Quit
 Set objIE = Nothing
End Sub

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Lengt...続きを読む

QgetElementsByClassName()

getElementsByClassName()の使い方での質問です。

Firefox/Safariなどでは、やってみると一応、prototype.jsがなくても使えるようですが、
prototype.jsはダウンロードして使った方がいいのでしょうか?

また、IEは、getElementsByClassName()は使えないみたいなのですが、本当につかえないのでしょうか?

現在、prototype.jsは最新の1.7を使っています。

Aベストアンサー

サポート状況だけで一喜一憂してはいけません。getElementsByClassName には、「生きた」ノードリストを返すという重要な性質があります。

<!DOCTYPE HTML>
<title>TEST</title>

<script type="text/javascript">
var sections = document.getElementsByClassName('section');
alert(sections.length); // この時点では 0
</script>

<div class="section"><p>HOGE</p></div>
<div class="section"><p>HUGA</p></div>
<div class="section"><p>GEHO</p></div>

<script type="text/javascript">
alert(sections.length); // この時点で 3 に増えている!
</script>

<script type="text/javascript">
while (sections.length > 0) {
 sections[0].className = 'subsection'; // @class を上書きするとリストから消えていく
}
alert(sections.length); // もちろん 0
</script>

この性質を利用すれば、よくある(多くの場合あまり良くない方法としての)load を待ってから云々、という処理をせずに済みます。

しかし、Prototype.js の getElementsByClassName コードが、この性質をちゃんと実装していた記憶はありません(ただの配列を返していたはず)。つまり、「クロスブラウザ」を目指したはずのものが、皮肉にもブラウザ間の実装差を生んでいます。ゆえに、ネイティブの getElementsByClassName だけを使うか、Prototype.js の「似非」getElementsByClassName だけを使うか、どちらかに統一することを強くお勧めします。

なお、querySelectorAll('.section') の戻り値は「生きてない」リストなので、配列と同じように扱うことができます。こちらは IE8 からサポートしています。ただ、getElementsByClassName に比べ、初動が若干遅いです。

サポート状況だけで一喜一憂してはいけません。getElementsByClassName には、「生きた」ノードリストを返すという重要な性質があります。

<!DOCTYPE HTML>
<title>TEST</title>

<script type="text/javascript">
var sections = document.getElementsByClassName('section');
alert(sections.length); // この時点では 0
</script>

<div class="section"><p>HOGE</p></div>
<div class="section"><p>HUGA</p></div>
<div class="section"><p>GEHO</p></div>

<script type="text/javascript">
alert(sections...続きを読む

QINPUTにnameがない場合のsubmit

<FORM ACTION="login.asp" METHOD="POST">
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
<INPUT TYPE="submit" NAME="btn01" VALUE="ログイン">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>

上記のHTMLに対して、VBAで操作する場合、
データセットした後

objIE.document.all.btn01.Click 'クリックメソッドを実行

で、submit出来るかと思います。

今、VBAで自動ログインしたいサイトが

<INPUT TYPE="submit" VALUE="ログイン">

のような感じで、nameの属性がありません。
こういうときは、VBAではどうすればログインできるのでしょうか。

初歩的な質問ですみませんが、わかる方教えてください。

<FORM ACTION="login.asp" METHOD="POST">
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
<INPUT TYPE="submit" NAME="btn01" VALUE="ログイン">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>

上記のHTMLに対して、VBAで操作する場合、
データセットした後

objIE.document.all.btn01.Click 'クリックメソッドを実行

で、submit出来るかと思います。

今、VBAで自動ログインしたいサイトが

<INPUT TYPE="submit" VALUE="ログイン...続きを読む

Aベストアンサー

objIE.document.forms(0).elements(2).click
または
objIE.document.getElementsByTagName("INPUT")(2).click

Qvba ie操作 ボタンを押したい(2)

https://ca.omc-card.co.jp/member/omcplus_login.html
のサイトにログインしたいのですが、ログインボタンが押せません。

ソースは、
**********************************************************************************
<FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value=""> 
   ~~~省略~~~
<TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15">
<TR>
<TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD>
</TR>
</TABLE>
</FORM>
**********************************************************************************
です。

---------------------------------------------------------------------------------
Sub test()
Dim objIE As InternetExplorer

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html"

Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop

objIE.Document.forms(0).Item("sid_input").Value = "×××"
objIE.Document.forms(0).Item("pw_input").Value = "×××"

Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop

'objIE.Document.forms(1).submit 'エラーになる
objIE.Document.all.Item("document.form1").Click 'エラーになる
objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。
objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。
objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる
objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる

Set objIE = Nothing
End Sub
---------------------------------------------------------------------------------

テキストにIDとPWを入れるところまでは出来たのですが、
ログインボタンを押すことができません。

すいませんがご教授ご回答よろしくお願いしますm( )m

https://ca.omc-card.co.jp/member/omcplus_login.html
のサイトにログインしたいのですが、ログインボタンが押せません。

ソースは、
**********************************************************************************
<FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value=""> 
   ~~~省略~~~
<TABLE border="0" cellspacing="0" cellpadding="...続きを読む

Aベストアンサー

 「ログイン」と表示されたボタンの html コード には
<A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A>
と書かれています。

 この html ソース は、簡単にいうと
<A href="リンク先URL"><IMG src="画像のURL"></A>
という構造で「画像をクリックするとリンク先のページが開く」ということを意味しています。

 ここの場合は、実際には「javascript:~~」というページはなく、「login.gif」という画像をクリックすると「checkInput(document.form1);」という「javascript」が働くというコードになります。

 従って、WEBページ自体の html 構造やブラウザ等のセキュリティの関係で受け付けてもらえない場合もありますが。。。

objIE.navigate "javascript:checkInput(document.form1);"

でもイケマス。

 「ログイン」と表示されたボタンの html コード には
<A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A>
と書かれています。

 この html ソース は、簡単にいうと
<A href="リンク先URL"><IMG src="画像のURL"></A>
という構造で「画像をクリックするとリンク先のページが開く」ということを意味しています。

 ここの場合は、実際には「javascript:~~」というページはなく、「login.gif」という画像を...続きを読む

QvbaでIEの名前を付けて保存(A)をしたい

VBA で IEの通知バー を操作したいです。
SendKeys で 通知バーの 保存(S) はできたのですが、
保存(s)の右隣の ▼ をクリックするとでてくる、 名前を付けて保存(A) の方法がわかりません。

どのようなキーをおくればよいのでしょうか。


他の質問をみると、SendKeysではなく ○○がよいですよ みたいな内容しか見つからず、
回答をみつけることができなくて困っておりますのでよろしくお願いいたします。

Aベストアンサー

VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。 | 初心者備忘録
http://www.ka-net.org/blog/?p=4855
とか。

Q起動済みのIEをハンドルから操作するには

既に起動済みのIEブラウザをWSH(VBS)などから、ハンドルを取得して
HTMLソース内のフォームに値をセット(Document forms elementなどで)
する事はできますでしょうか?
出来るとすれば、IEを捕まえて操作するには、どのようにすれば良い
でしょうか?

■補足
起動したIEは、自身のスクリプトからオブジェクトを生成したもの
では無く、ウインドウタイトルくらいしか解りません。

Aベストアンサー

とりあえず
Set ie = GetObject("", "InternetExplorer.Application")
Set ie = GetObject(, "InternetExplorer.Application")
のどちらかで取得できると思います。
Set ie = CreateObject("Shell.Application").Windows(0)
で取得する方法もあるらしいのですが、普通のフォルダもieとして認識してしまうため、純粋にieだけを取得する場合はチェックが必要だと思います。
取得したieでyahooで"おいしいラーメン"の検索結果の件数を表示します。
Sub sample()
Const READYSTATE_COMPLETE = 4
Dim ie As Object
Dim obj As Object
For Each obj In CreateObject("Shell.Application").Windows
If TypeName(obj.Document) = "HTMLDocument" Then
Set ie = obj
Exit For
End If
Next
If ie Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
MsgBox "取得したieの情報" & vbCrLf & ie.LocationName & vbCrLf & ie.LocationURL & vbCrLf & TypeName(ie.Document)
ie.Navigate "www.yahoo.co.jp" 'yahooへ
Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち
ie.Document.forms("sf1").elements("srchtxt").Value = "おいしいラーメン" '検索文字
ie.Document.forms("sf1").submit '検索
Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち
If InStr(ie.Document.body.innertext, "に一致するウェブページは見つかりませんでした") > 0 Then
MsgBox "0件"
Else
MsgBox ie.Document.all("yschinfo").all(6).innertext & "件"
End If
Set ie = Nothing
End Sub

とりあえず
Set ie = GetObject("", "InternetExplorer.Application")
Set ie = GetObject(, "InternetExplorer.Application")
のどちらかで取得できると思います。
Set ie = CreateObject("Shell.Application").Windows(0)
で取得する方法もあるらしいのですが、普通のフォルダもieとして認識してしまうため、純粋にieだけを取得する場合はチェックが必要だと思います。
取得したieでyahooで"おいしいラーメン"の検索結果の件数を表示します。
Sub sample()
Const READYSTATE_COMPLETE = 4
Dim ie As Ob...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング