タブのクリックの方法について

最近の書き込み件数: 今日 0件、昨日 0件
未読分:11件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#11 2015年4月2日(木)08時28分
From: VBAマスター
返事 変更
> If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
> の部分で、
>
> 「オブジェクト変数またはWithブロック変数が設定されていません。」
> となってしまいます。

オブジェクト変数が設定されていないということは、おそらくobjIEのオブジェクト変数が設定されていないということです。

ウォッチウィンドウを利用して「objIE」がどの時点で設定解除されているのか確認してみてください。

Message#10 2015年3月31日(火)16時09分
From: ぴぃスケ
返事 変更
1回目の処理では無事、選択出来ました。

Application.OnTime で再度同じ処理(subプロシージャ)を呼び出すと、

If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
の部分で、

「オブジェクト変数またはWithブロック変数が設定されていません。」
となってしまいます。

objIEは
Public objIE As New InternetExplorer 'IEオブジェクト

を冒頭で宣言したものを使いまわしています。

アドバイス頂いたのをそのままテストしています。
'span要素を全て抽出
For i = 0 To objIE.document.getElementsByTagName("span").Length - 1
If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
objIE.document.getElementsByTagName("span")(i).Click
End If

Call ieCheck(objIE)

'Exit For
Next i

引き続きアドバイス、情報提供をお待ちしています。

Message#9 2015年3月30日(月)09時17分
From: ばばぞの
返事 変更
おーーーー

気になっていたので試していたら、1分選択できとるやないですかー

こうやればいいのかと感心した次第ですw

Message#8 2015年3月28日(土)18時51分
From: ぴぃスケ
返事 変更
最後の「1分」をクリックすれば良さそうですね。

土日は動作確認できないので、週明けに確認してみますね。


VBAマスターのメッセージ(#7)への返事

> > spanというものに対して「1分」というのを検索して一致したらクリックという感じのソースコードに見えますが、この中に「1分」は複数回出現しているという認識でいたので、どの「1分」をクリックするのかな?と思っていました。
> > 生成されたHTMLだと1個だったのでしょうか??
>
> よく見てなかったですが、たしかに2つありますね。
>
> 最後のやつが表示されている「1分」のやつっぽいので「Exit For」を削除すれば最後の「1分」がクリックされます。
>
> Sub test()
>
> Dim objIE As InternetExplorer
>
> Call ieView(objIE, "http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP")
>
> objIE.document.getElementById("FixedPayoutHLOOD").Click 'クリック
>
> Call ieCheck(objIE)
>
> 'span要素を全て抽出
> For i = 0 To objIE.document.getElementsByTagName("span").length - 1
>
> If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
>
> objIE.document.getElementsByTagName("span")(i).Click
>
> Call ieCheck(objIE)
>
> 'ループ解除削除
> 'Exit For
>
> End If
>
> Next i
>
> End Sub
>
> ただし、参考URL自体が現在データがない状態で表示されているので、正常に表示されるかは確認できませんでした。
>
> とりあえず表示上は「1分」が黄色背景で選択されているように見えますが。

Message#7 2015年3月28日(土)10時14分
From: VBAマスター
返事 変更
> spanというものに対して「1分」というのを検索して一致したらクリックという感じのソースコードに見えますが、この中に「1分」は複数回出現しているという認識でいたので、どの「1分」をクリックするのかな?と思っていました。
> 生成されたHTMLだと1個だったのでしょうか??

よく見てなかったですが、たしかに2つありますね。

最後のやつが表示されている「1分」のやつっぽいので「Exit For」を削除すれば最後の「1分」がクリックされます。

Sub test()

Dim objIE As InternetExplorer

Call ieView(objIE, "http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP")

objIE.document.getElementById("FixedPayoutHLOOD").Click 'クリック

Call ieCheck(objIE)

'span要素を全て抽出
For i = 0 To objIE.document.getElementsByTagName("span").length - 1

If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then

objIE.document.getElementsByTagName("span")(i).Click

Call ieCheck(objIE)

'ループ解除削除
'Exit For

End If

Next i

End Sub

ただし、参考URL自体が現在データがない状態で表示されているので、正常に表示されるかは確認できませんでした。

とりあえず表示上は「1分」が黄色背景で選択されているように見えますが。

Message#6 2015年3月27日(金)23時11分
From: ぴぃスケ
返事 変更
ご回答ありがとうございます。

spanというものに対して「1分」というのを検索して一致したらクリックという感じのソースコードに見えますが、この中に「1分」は複数回出現しているという認識でいたので、どの「1分」をクリックするのかな?と思っていました。
生成されたHTMLだと1個だったのでしょうか??

ブラウザの画面上では1分は1個ですが。
> <div class="tab" style="display: none;"><span>1 分</span></div>
この"display: none;"があるのと無いのがあるのが気になっています。

引き続きアドバイスいただけましたら助かります。



VBAマスターのメッセージ(#4)への返事

> あまり見れていないけど・・・・
> とりあえず以下で「1分」のクリック自体はできている模様。
> ただ、なぜか「オプションは現在閉鎖されています」と出ます。
>
> Sub test()
>
> Dim objIE As InternetExplorer
>
> Call ieView(objIE, "http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP")
>
> objIE.document.getElementById("FixedPayoutHLOOD").Click 'クリック
>
> Call ieCheck(objIE)
>
> 'span要素を全て抽出
> For i = 0 To objIE.document.getElementsByTagName("span").Length - 1
>
> If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
>
> objIE.document.getElementsByTagName("span")(i).Click
>
> Call ieCheck(objIE)
>
> Exit For
>
> End If
>
> Next i
>
> End Sub
>
> 本来のソースは以下のようになっており
>
> <script type="text/html" id="template-categoryLayout">
> <div id="assetsCategoryFilterZoneRegion" class="filtersArea"></div>
> </script>
>
> div括りの中でjavascriptを利用して
>
> <div class="tab" style="display: none;"><span>1 分</span></div>
>
> が生成されているっぽいですね。
>
> ですので、クリック自体はできてもその後の表示処理もjavascriptで行っているため、
> 単純なクリック処理ではうまく表示されないのかもしれません。
>
> こうなると今度はjavascriptの処理まで全て見ていく形になります。
> さらにjQueryなんかを利用していた場合そこまで掘り下げてみていく必要があるかと思います。
>
> ざっと見た感じの情報ですが。。。

Message#5 2015年3月27日(金)09時47分
From: VBAマスター
返事 変更
念のため以下のようにすると1分部分を抽出しているのが確認できます。

If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then
msgBox objIE.document.getElementsByTagName("span")(i).outerHTML
End If

ちなみにspan要素の親要素であるdivをクリックしたらどうかと思ってやってみましたが結果は同じでした。
親要素をクリックする場合は以下のように記述します。

'親要素のdiv要素をクリック
objIE.document.getElementsByTagName("span")(i).parentElement.Click

Message#4 2015年3月27日(金)09時44分
From: VBAマスター
返事 変更
あまり見れていないけど・・・・
とりあえず以下で「1分」のクリック自体はできている模様。
ただ、なぜか「オプションは現在閉鎖されています」と出ます。

Sub test()

Dim objIE As InternetExplorer

Call ieView(objIE, "http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP")

objIE.document.getElementById("FixedPayoutHLOOD").Click 'クリック

Call ieCheck(objIE)

'span要素を全て抽出
For i = 0 To objIE.document.getElementsByTagName("span").Length - 1

If objIE.document.getElementsByTagName("span")(i).innerText = "1 分" Then

objIE.document.getElementsByTagName("span")(i).Click

Call ieCheck(objIE)

Exit For

End If

Next i

End Sub

本来のソースは以下のようになっており

<script type="text/html" id="template-categoryLayout">
<div id="assetsCategoryFilterZoneRegion" class="filtersArea"></div>
</script>

div括りの中でjavascriptを利用して

<div class="tab" style="display: none;"><span>1 分</span></div>

が生成されているっぽいですね。

ですので、クリック自体はできてもその後の表示処理もjavascriptで行っているため、
単純なクリック処理ではうまく表示されないのかもしれません。

こうなると今度はjavascriptの処理まで全て見ていく形になります。
さらにjQueryなんかを利用していた場合そこまで掘り下げてみていく必要があるかと思います。

ざっと見た感じの情報ですが。。。

Message#3 2015年3月26日(木)13時41分
From: ぴぃスケ
返事 変更
続きです。

下記のソースコードで、
IE起動→スプレッドオンデマンドの選択までできました。

その後の時間を選択するところでつまづいています。

Sub Macro1()
'
' Macro1 Macro
'

IE.Visible = True 'ブラウザ表示
IE.Navigate2 "http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP" 'ハイローのログイン画面

While (IE.Busy = True) Or (IE.readyState < READYSTATE_COMPLETE) '表示待ち
DoEvents
Wend

IE.document.getElementById("FixedPayoutHLOOD").Click 'クリック

End Sub


下記のHTMLの「1分」を選択したいのです。

assetsCategoryFilterZoneRegionというIDの部分の下の1分の所をクリックするようなソース
コードを記述したいのですが・・・
<div class="tab" style="">
<span>

1 分

</span>
</div>


どんな記述をしたら良いでしょうか??



<section id="categoryRegion">

<div>
<div id="assetsCategoryFilterZoneRegion" class="filtersArea">
<div>
<div class="tab" style="display: none;"></div>
<div class="tab" style="display: none;">
<span>

全て

</span>
</div>
<div class="tab" style="display: none;">
<span>

全て

</span>
</div>
<div class="tab first selected" style="">
<span>

全て

</span>
</div>
<div class="tab" style="display: none;">
<span>

15分

</span>
</div>
<div class="tab" style="display: none;">
<span>

1時間

</span>
</div>
<div class="tab" style="display: none;">
<span>

1日

</span>
</div>
<div class="tab" style="display: none;">
<span>

15分

</span>
</div>
<div class="tab" style="display: none;">
<span>

1時間

</span>
</div>
<div class="tab" style="display: none;">
<span>

1日

</span>
</div>
<div class="tab" style="display: none;">
<span>

1 分

</span>
</div>
<div class="tab" style="display: none;">
<span>

3 分

</span>
</div>
<div class="tab" style="display: none;">
<span>

5 分

</span>
</div>
<div class="tab" style="">
<span>

1 分

</span>
</div>
<div class="tab" style="">
<span>

3 分

</span>
</div>
<div class="tab last" style="">
<span>

5 分

</span>
</div>
</div>
</div>
</div>

</section>

<div id="assetsCategoryFilterZoneRegion" class="filtersArea">
<div>
<div class="tab" style="display: none;"></div>
<div class="tab" style="display: none;">
<span>

全て

</span>
</div>
<div class="tab" style="display: none;">
<span>

全て

</span>
</div>
<div class="tab first selected" style="">
<span>

全て

</span>
</div>
<div class="tab" style="display: none;">
<span>

15分

</span>
</div>
<div class="tab" style="display: none;">
<span>

1時間

</span>
</div>
<div class="tab" style="display: none;">
<span>

1日

</span>
</div>
<div class="tab" style="display: none;">
<span>

15分

</span>
</div>
<div class="tab" style="display: none;">
<span>

1時間

</span>
</div>
<div class="tab" style="display: none;">
<span>

1日

</span>
</div>
<div class="tab" style="display: none;">
<span>

1 分

</span>
</div>
<div class="tab" style="display: none;">
<span>

3 分

</span>
</div>
<div class="tab" style="display: none;">
<span>

5 分

</span>
</div>
<div class="tab" style=""></div>
<div class="tab" style="">
<span>

3 分

</span>
</div>
<div class="tab last" style="">
<span>

5 分

</span>
</div>
</div>
</div>
</div>

</section>

Message#2 2015年3月26日(木)04時57分
From: スカイラインがほしい
返事 変更
どう書いたらいいかより一度自分で書いてみて分からないところを聞かないとこの先したいことなんて絶対できないと思うぜ?

↓のページを参考に自分で作ってみるがよろし。

http://www.vba-ie.net/ie/navigate.html
http://www.vba-ie.net/element/getelementsbytagname.html


ここのサイトは本当に勉強になる。
管理人さんに感謝だね!

Message#1 2015年3月25日(水)02時04分
From: ぴぃスケ
返事 変更
下記のバイナリーオプションのサイトの検証用に自動操作を行おうと思っています。

http://jp.demo.highlow.net/

まずは、手始めに、「ON DEMAND」タブをクリック
次に、「1分」をクリック
通貨のセレクトボックスに任意の通貨を選択
金額を入力
HIGH、LOWを選択、エントリーという流れを作ろうと思いますが、

最初の「ON DEMAND」をクリックするにはどの様なソースコードを記入すれば良いでしょうか?

ちなみに、下記HTMLソースの
<span id="ChangingStrikeOOD" class="highlow">
このChangingStrikeOODに対してクリック操作が出来ればいいのかな?と思うのですが、
VBAのソースコードだとどんな感じになるのでしょうか??

ご教授いただけたら嬉しいです。


<section id="gameTypeRegion">

<div>
<div id="gameTabArea" class="gameTabArea">
<div id="assetsGameTypeZoneRegion">
<ul>
<li class="gameTab">
<span id="FixedPayoutHL" class="highlow">

スプレッドHIGH/LOW

</span>
</li>
<li class="gameTab"></li>
<li class="gameTab">
<span id="ChangingStrikeOOD" class="highlow">

ON DEMAND

</span>
</li>
<li class="gameTab selected">
<span id="FixedPayoutHLOOD" class="highlow"></span>
</li>
</ul>
</div>
</div>
</div>

</section>


以上です、よろしくおねがいいたします。

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

スポンサー リンク

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

スポンサー リンク

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com