痔になりやすい生活習慣とは?

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

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

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

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

A 回答 (1件)

ここを読んでみればよいのですが、だらだらと文章が長いですね。

^^;
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;"

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

助かりました

どこのどなたか存じませんが、貴重な時間を割いてご親切にありがとうございます。
結論から言いますと、「id名.Click」の2段階指定でうまくいきました!

初め、目的とする箇所の id名 でいきなりクリックしたところ反応がなく、
教えて頂いた Links(i) のループで id名 を確認したところ、なぜかその id名 が見当たりませんでした。
DOM Explorer では id が見えているのに、VBAでHTMLソースを確認すると id が存在しないため、
すっかり訳が分からなくなってしまいました。
しかし、そのクリックしたい箇所がドロップダウンリストの中の項目だったので、まずドロップダウンリストの id名 をクリックし、
その次に目的とする項目の id名 をクリックしたところ、見事動作しました!

2日もかけて実現できず諦めかけていたのですが、思い切って質問してみて良かったです。
ドロップダウンリストの中の項目だったというのがポイントだったと思うのですが、
頭が鈍くそれに気付かず、質問の際も説明不足で申し訳ありませんでした。
教えて頂いたすべてのことが、問題の解決にとても役立ち、勉強になりました。
本当にありがとうございました。

お礼日時:2015/08/11 21:50

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

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

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

このQ&Aを見た人が検索しているワード

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

QExcel VBAでのIE操作でクリックができないボタンはあるのでしょうか

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="user-select: none;">
<div class="goog-inline-block goog-imageless-button-outer-box">
<div class="goog-inline-block goog-imageless-button-inner-box"><div class="goog-imageless-button-pos">
<div class="goog-imageless-button-top-shadow"></div>
<div class="goog-imageless-button-content">保存</div>
</div>
</div>
</div>
</div>

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="us...続きを読む

Aベストアンサー

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

With objIE

Set buttons = .Document.getElementsByClassName("goog-imageless-button-content")
For Each n In buttons
   If n.innerText Like "保存*" Then ''= "保存" でもよい
    n.Click
    Exit For
   End If
Next n

End With

で、行けるのではないでしょうか。
もちろん、オブジェクト配列になっているはずですから、それで、何番目か探して、直接、buttons(9).Clickとしても行けるかとは思います。

質問と食い違っていたら、補足をつけてください。

それと、余談なのですが、Googleで、IEを使うのは抵抗ありませんか?フルに動かないと思います。かと言って、Google Chrome をVBAで扱う方法が、なぜか確立できていませんね。Selenium VBAを使うことにはなっているのですが、いろいろやってみて、どうやらバージョンが遅れていることに気が付きました。前から、ずっと遅れているようです。

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

Wit...続きを読む

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

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

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


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

Aベストアンサー

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

QWEBページからのメッセージをVBAで

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


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


Sub test()

Dim ie As Object

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True
ie.navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html"
      
Do While ie.Busy Or ie.readyState < 4
DoEvents
Loop

ie.document.getElementsByClassName("bt2")(0).Click '-ここで止まる

Sleep 2000

SendKeys "{Enter}"

End Sub

ステップ実行していくと、ここで止まると書いた所で、
IE上にダイアログは表示されるのですが、
それ以上ステップ実行ができなくなってしまいます。

ダイアログを自分でOKかキャンセルで消すと続きが動くようになります。
その間はVBEはビジー状態となり操作できません。

そのためそれ以降のsendkeysメソッドに
たどり着けない状況かと思われます。

いろいろ調べたところIE8以降はダイアログボックスは
IEから出ているのではなくOS?から出ているとの事でした。

上記のサイトはHTML本体にjavaスクリプトが記載されており、
それをVBAから操作すればどうにかOKボタンが押せるらしいのですが、
自分が操作したいページにはそれらしき記載がありませんでした。

対象のアンカータグは
<a herl=URL 中略 data-comfirm=続行しますか? >
のような感じで記載がありました。

完全に煮詰まっております。
自動でOKをクリックするかEnterキーでOKを押すでも構いません。
どうかご教授お願いいたします。

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


Dec...続きを読む

Aベストアンサー

ご参考
https://gist.github.com/kumatti1/4028479

QExcel VBA にて JavaScript の実行方法について

こんにちは。

さっそくですがExcelのVBAにてIEを操作しているのですが、実行方法が分からなく困っています。
サンプルコードは次のようになります。

<a HREF="#" onclick="JavaScript: return logingo();">
<img src="aaa.gif" alt="ログイン"width="100" height="100" border="0" tabindex="3">
</a>

上記のコードのJavaScriptの実行方法がお分かりの方はおりますでしょうか?
いろいろ調べて実行したのですが動作しませんでした。
サンプルなどいただけると有り難いです。

よろしくお願いします。

Aベストアンサー

こんにちは。

>実行されなく何も変化がありませんでした。

#1のソース元は、
http://d.hatena.ne.jp/ken3memo/20110626/1309072974
でした。ぴったりだと思い紹介したのです。

何か、私は、読み落としがあったかもしれません。
元のサイトの操作は、JRAですが、最初にINET-IDのValueとして、IDを入れています。

objIE.Document.getElementsByName("inetid")(0).Value = "A1111111PC"

objIE.Document.Script.setTimeout "javascript:send();return false;",200

ご自身で、もう一度、そのソース元を読んでみてください。ただし、YouTube はだる~いです(^^;。

天下のJRAでも、内容的には、もう何年も仕組みを変えていないから、新しい方法が出てきたら、ダメだという可能性もないとも限りませんが、必ず、どれかが当たるはずです。(不謹慎な言い方でスミマセン-根拠は、LastPassというツールは、Microsoft 以外は、たいていの所はログインします。)

それ以外では、"onClick"ですから、
Class 、ID、Form でとった、Object に対して、
object(0).fireEvent "onclick"

または、
object.fireEvent "onclick"

("onclick") でも同じです。

という方法がありますが……。
超有名企業などでは、どっちもダメなときがあります。

http://stackoverflow.com/questions/31221853/excel-vba-how-to-click-on-onclick-events-of-a-div-on-ie11

この内容って、なぜダメだったのか、なんとなく釈然としませんが、成功しているようです。

以下は、問題集? これは、なんとなく分かる程度ですが。
http://language-and-engineering.hatenablog.jp/entry/20090907/p1

役に立たなかったらすみません。

こんにちは。

>実行されなく何も変化がありませんでした。

#1のソース元は、
http://d.hatena.ne.jp/ken3memo/20110626/1309072974
でした。ぴったりだと思い紹介したのです。

何か、私は、読み落としがあったかもしれません。
元のサイトの操作は、JRAですが、最初にINET-IDのValueとして、IDを入れています。

objIE.Document.getElementsByName("inetid")(0).Value = "A1111111PC"

objIE.Document.Script.setTimeout "javascript:send();return false;",200

ご自身で、もう一度、そのソース元を読んでみて...続きを読む

QVBAでIEの操作→サブウインドウを操作するには

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "file:///C:/oya.html"'「oya.html」を開く
'----表示待ち↓--------
Do While objIE.Busy
 DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウインドウを開く" Then
linkitem.Click
End If
Next
'----表示待ち↓--------
Do While objIE.Busy
DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
  For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウィンドウを閉じる" Then
linkitem.Click
End If
Next
End Sub
---------------↑-------------------------------------------
--------oya.html ↓-----------------------------------------
<html>
<head><script>
function showModal(){
var value = showModalDialog('ko.html');
}
</script></head>
<TITLE>親ウィンドウ</TITLE>
<body>
<a href="javascript://" onclick="showModal()">子ウインドウを開く</a><br>
</body>
</html>
-----------------↑-----------------------------------------
--------ko.html ↓--------------------------------------------
<html>
<TITLE>子ウィンドウ</TITLE>
<body>
<a href="#" onClick="window.close(); return false;">子ウィンドウを閉じる</a><br>
</body>
</html>
------------------↑-----------------------------------------

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = Tru...続きを読む

Aベストアンサー

状況を理解しました。
子ウィンドウを、showModalDialog で開いている為に、子ウィンドウを閉じるまで Excel に制御が返ってこないワケですね。
VBA で制御できるレベルではなさそうです。一応参考 URL を添付しておきますが。。。

http://www.usefullcode.net/2006/12/ieihtmldocument2.html
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200509/05090016.txt

QVBAからIEを操作する時のウィンドウの選択の仕方がわかりません

VBAで、webページを操作するマクロを組んでいます。
具体的な手順としては、セルの商品番号をweb上の検索ボックスに入力して、別ウィンドウで開いた情報を「すべて選択」「コピー」してexcellの別シートに「貼り付け」までを行うものなのですが、
別ウィンドウで開いたページに対して、Sendkeysを行うにはどうやったらいいのでしょうか。
仮に、入力ページをA、結果ページをBとしたとき、Aに対しての入力とBページの表示までは出来ているのですが、Bページに対しての操作が出来ません。

ちなみに、事情があってwebクエリはあえて使っていません。
どなたか、いい解決方法・プロシージャをご存知でしたらよろしくお願いします。

Aベストアンサー

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kotaeru.php3?q=" & Range("A1").Value

みたいなコードで検索結果ページを開くことができると思います。同様に、商品番号
を渡すパラメータがあるはずですから、探して見て下さい。CGI にパラメータを渡す
方法が Get でも Post の場合でも検索フォームの HTML ソースを見れば分かります。

取り合えず、一度検索フォームの HTML ソースを見てみましょう。

これが可能なら、コードで IE オブジェクトを作り、直接検索結果のページを開くこ
とができますので、IE のウインドウハンドルやウインドウタイトルは簡単に取得
できます。

簡単な例です。A1 セルの値を Google で検索し、結果を A5 セルに貼り付けます。


Option Explicit

Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
  ByVal hWnd As Long _
) As Long
  
Sub Sample()

  Dim IE   As Object
  Dim strURL As String
  Dim lngRet As Long
  
  Const READYSTATE_COMPLETE = &H4
  
  strURL = "http://www.google.com/search?hl=ja&lr=lang_ja&ie=Shift_JIS&q="
  strURL = strURL & Range("A1").Value
   
  Set IE = CreateObject("InternetExplorer.application")
  IE.Visible = True
  IE.navigate strURL
  Do
    DoEvents
  Loop Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE
  
  ' IE のウインドウをアクティブにする
  lngRet = SetForegroundWindow(IE.hWnd)
  If lngRet <> 0 Then
    ' アクティブにできたらキー送信して結果をコピー
    SendKeys "^a", True
    SendKeys "^c", True
    ' 貼り付け
    Range("A5").Select
    ActiveSheet.Paste
  End If
  Set IE = Nothing

End Sub

どうしても検索フォームを経由し、新しい IE を開く必要がある場合は、
参考 URL 先の記事が参考になると思います。

参考 URL: http://www.ken3.org/cgi-bin/group/vba_ie.asp

ちなみに、SendKeys を使わない方法としては、IE.Document.body.innerHTML
で HTML ソースは取得し、クリップボードに転送してからペースト、、

というのでも良いかもしれません。

では。

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kot...続きを読む

QVBA IE ダウンロード ダイアログ制御(名前を付けて保存)

IE上に表示されたイメージアイコンをクリックすると、図に示す画面が現われます。
これをVBA制御により「名前を付けて保存」ボタンを押したいのですがうまくいかずご教授頂きたいです。
(なお、恐縮ながらSendkeysを利用する方法は求めておりません。また、こちら社内システムででてくる画面であるためリンクを示すことができません、申し訳ございませんがご理解願います。)

質問は↑につきますが、やってみたこと①②について補足で示します。
①SendMessageを利用する場合
https://oshiete.goo.ne.jp/qa/1809850.html

→コピペでやりたいことにかなり近いことができましたが、「開く(O)」ボタンを押してしまっています。若干理解不足ではありますが、このソースでは、「名前を付けて保存」、又は「保存」という記述しかないのに、なぜ「開く」ボタンが押さる挙動となるのかわかっていません。

②UIAutomationを利用する場合
https://oshiete.goo.ne.jp/qa/9622324.html

→エラーがでてしまい、うまくボタンをおすところまで行きませんでした。
わからないなりにUIAutomation関連の知識を入れながらパラメータを変えての試行錯誤しましたがギブアップです。うまくボタンをとらえることができません。(いや、知識不足がかなり大きいです。。)

こちらは、以前「通知バー」制御に関する投稿させて頂いた内容で、うまくいった経緯があること、また、「名前を付けて保存」ボタンが押下が成功したら、後の「名前を付けて保存ダイアログボックス」制御がそのまま利用できそうなので試してみた次第です。

IE上に表示されたイメージアイコンをクリックすると、図に示す画面が現われます。
これをVBA制御により「名前を付けて保存」ボタンを押したいのですがうまくいかずご教授頂きたいです。
(なお、恐縮ながらSendkeysを利用する方法は求めておりません。また、こちら社内システムででてくる画面であるためリンクを示すことができません、申し訳ございませんがご理解願います。)

質問は↑につきますが、やってみたこと①②について補足で示します。
①SendMessageを利用する場合
https://oshiete.goo.ne.jp/qa/18...続きを読む

Aベストアンサー

こんな感じですかね。
---
Option Explicit
'参照設定 UIAutomationClient
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr

Sub hoge()

Dim o As IUIAutomation
Dim e As IUIAutomationElement
Set o = New CUIAutomation
Dim h As LongPtr

h = FindWindowEx(0, 0, "#32770", "Internet Explorer")
If h = 0 Then Exit Sub
Set e = o.ElementFromHandle(ByVal h)

Dim iCnd As IUIAutomationCondition
iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "名前を付けて保存(A)")

Dim Button As IUIAutomationElement
Button = e.FindFirst(TreeScope_Subtree, iCnd)

Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke

End Sub

こんな感じですかね。
---
Option Explicit
'参照設定 UIAutomationClient
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr

Sub hoge()

Dim o As IUIAutomation
Dim e As IUIAutomationElement
Set o = New CUIAutomation
Dim h As LongPtr

h = FindWindowEx(0, 0, "#32770", "Internet Explorer")
If h = 0 Then Exit Sub
Set e...続きを読む

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...続きを読む

QVBAでWEB上の入力項目に値をいれたいのですがフォームのタイプがhiddenの場合の入れ方がわかりません。

お世話になります。

VBAでWEB上の入力項目に値をいれたいのですがフォームのタイプがhiddenにはどのようにいれたらよいでしょうか?

WEB上では
(1)「選択」ボタンを押す。
(2)別の画面が開き、そこで、値を選択してOK
(3)元の画面に戻ると(2)の値が反映されている。

WEBのソース的にみると
(1)の状態
<TD bgcolor="#cccccc">
<INPUT type="image" name="s_otherto" alt="選択" src="/image/s_choice.gif" border="0">
</TD>

(2)別の画面で値を選択

(3)の状態
<TD bgcolor="#cccccc">
<INPUT type="image" name="s_otherto" alt="選択" src="/image/s_choice.gif" border="0">
<INPUT type="hidden" name="otherto" value="(2)で選択したID"><FONT size="2">(2)で選択した個人名</FONT>
</TD>

やりたいことは、今は、手で、(1)~(3)を実行しているのですが、
VBAでどのようにしたら、自動で
(1)の状態から(3)の(<INPUT type="hidden" name="otherto" value="(2)で選択したID"><FONT size="2">(2)で選択した個人名</FONT>)が追加された状態にするにはどのようにしたらよいのでしょうか?

typeがtextの場合は、
objIE.Document.getElementsByName("memo")(0).Value = "文章"
で入れれることがわかったのですが、
objIE.Document.getElementsByName("otherto")(0).Value するとエラーが出ます。。。

お手数ですがよろしくお願いします。

お世話になります。

VBAでWEB上の入力項目に値をいれたいのですがフォームのタイプがhiddenにはどのようにいれたらよいでしょうか?

WEB上では
(1)「選択」ボタンを押す。
(2)別の画面が開き、そこで、値を選択してOK
(3)元の画面に戻ると(2)の値が反映されている。

WEBのソース的にみると
(1)の状態
<TD bgcolor="#cccccc">
<INPUT type="image" name="s_otherto" alt="選択" src="/image/s_choice.gif" border="0">
</TD>

(2)別の画面で値を選択

(3)の状態
<TD bgcolor="#ccccc...続きを読む

Aベストアンサー

objIE.Document.getElementsByName("otherto")
↑これはオブジェクトです。
(1)の時まだありません。

(2)の処理を施し

(3)で初めて現れるオブジェクトです。


※Value参照で落ちているのではない
※objIE.Document.getElementsByName("otherto")(0)という配列が存在していないのに、0番目を参照しているから落ちている
という事を理解しましょう


オブジェクト参照は、こまめに変数にセットしてあげると、どこで落ちているかがわかりやすくなりますよ。



「otherto」などを作成して、TDに追加してあげないといけません。


Dim l_htmDoc  As Object
Set l_htmDoc = objIE.Document

Dim l_objImg  As Object
Dim l_tblTD   As Object

'イメージを取得
Set l_objImg = l_htmDoc.getElementsByName("s_otherto")(0)
'イメージの親のTDを取得
Set l_tblTD = l_objImg.parentNode

'TDにHIDDENを追加
Dim l_htmHdn  As Object
Set l_htmHdn = l_htmDoc.createElement("input")
With l_htmHdn
  .Type = "hidden"
  .Name = "otherto"
  .Value = "(2)で選択したID"
End With
Call l_tblTD.appendChild(l_htmHdn)

'TDにFONTを追加
Dim l_htmFont  As Object
Set l_htmFont = l_htmDoc.createElement("font")
With l_htmFont
  .Size = "2"
  .innerText = "(2)で選択した個人名"
End With
Call l_tblTD.appendChild(l_htmFont)

objIE.Document.getElementsByName("otherto")
↑これはオブジェクトです。
(1)の時まだありません。

(2)の処理を施し

(3)で初めて現れるオブジェクトです。


※Value参照で落ちているのではない
※objIE.Document.getElementsByName("otherto")(0)という配列が存在していないのに、0番目を参照しているから落ちている
という事を理解しましょう


オブジェクト参照は、こまめに変数にセットしてあげると、どこで落ちているかがわかりやすくなりますよ。



「otherto」などを作成して、TDに追加してあげな...続きを読む

Q現在、開いているIEの子Windowの操作・情報取得はどうやってできるでしょうか。

あるWebページで親ページのリンクから派生した子Windowのソースの取得、子Window内のリンクのクリックなどを行いたいです。子ページではデータが自動更新され、その変化をプログラムで記録したいと考えています。

親ページからきちんとログインした状態でないと、いきなり子ページのURLを指定してもエラーになるようなページです。

そのため、手動で子Windowを立ち上げて、後はプログラムでいろいろと自動処理をしようと思うのですが、そのためには、現在開いている子Windowの識別情報のようなものを取得する必要があります。このためにはどのクラス(ActiveX?,.NET?)のなんという関数()を使えばよろしいのでしょうか。

Aベストアンサー

私が思いついたのは、子WindowのタイトルかURLで検索する方法。
例えば、Wshだと…
子Windowのソースを保存するWshです。

---
''子Windowのタイトル
Ko_Title=""

''子WindowのURL
Ko_Url=""

''保存先ディレクトリ
SaveDir = "C:\"

'子Windowを探す.
Set IEAppKo = Nothing
For Each IEApp In CreateObject("Shell.Application").Windows()
If InStr(1, IEApp.fullname, "iexplore.exe", vbTextCompare) > 0 Then
''If IEApp.LocationUrl = Ko_Title Then 'URLで検索する場合はこちら
If IEApp.LocationName = Ko_Title Then
Set IEAppKo=IEApp
Exit For
End If
End If
Next

If IEAppKo Is Nothing Then
MsgBox("子Windowを開いていません。")
WScript.Quit
End If

''子WindowのBody部分のソースを保存
nowdt = Now()
TimeStamp = CStr( _
Year(nowdt) & _
Right("00" & Month(nowdt),2) & _
Right("00" & Day(nowdt),2) & _
Right("00" & Hour(nowdt),2) & _
Right("00" & Minute(nowdt),2) & _
Right("00" & Second(nowdt),2))

Set objFileSys = CreateObject("Scripting.FileSystemObject")
SaveFileName = objFileSys.BuildPath(SaveDir,TimeStamp & ".html")
Set objOutFile = objFileSys.CreateTextFile(SaveFileName)
objOutFile.Write(IEAppKo.Document.Body.innerHTML)
objOutFile.Close()

MsgBox("終了")

--
参考URL
http://homepage3.nifty.com/aya_js/wsh/wsh23.htm
http://www.happy2-island.com/vbs/cafe02/capter00701.shtml
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reflist_vb.asp

私が思いついたのは、子WindowのタイトルかURLで検索する方法。
例えば、Wshだと…
子Windowのソースを保存するWshです。

---
''子Windowのタイトル
Ko_Title=""

''子WindowのURL
Ko_Url=""

''保存先ディレクトリ
SaveDir = "C:\"

'子Windowを探す.
Set IEAppKo = Nothing
For Each IEApp In CreateObject("Shell.Application").Windows()
If InStr(1, IEApp.fullname, "iexplore.exe", vbTextCompare) > 0 Then
''If IEApp.LocationUrl = Ko_Title Then 'URLで検索する場合はこちら
...続きを読む


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

人気Q&Aランキング