javascriptの操作について

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

最新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#8 2015年3月9日(月)18時07分
From: VBAマスター
返事 削除 変更
setTimeoutで非同期処理するのはブラウザの処理との非同期って形ですよね。

ですので、

IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100

の処理と

<script language="JavaScript"><!--
//PDF表示確認POPUP
function pdf(url) {
a=confirm('PDFを表示します。');
if(a) location.href='a.pdf';
else alert('なにもしません');
}
// --></script>

は別処理で後者の方は非同期処理されないので、どちらにせよ、クリック処理ができたとしても次へは進めない気がしますが。

とりあえず

IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100

が動かないということですが、これはidがそのまま変数になっているので""がたりてないですね。
やるなら、以下のように""でidを括って文字列にしないとだめです。
一応こっちで動作確認しましたが、ポップアップ画面が表示されました。

IE.document.Script.setTimeout "javascript:document.getElementById(""" & id & """).click()", 100

Message#7 2015年3月5日(木)17時54分
From: ぶーたん
返事 削除 変更
VBAマスターのメッセージ(#6)への返事

ファイル名を取得する方法ありがとうございます。
とても参考になりました。

dim id as strign
id="popOK"
IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100
の部分はサブルーチン化を考えており、
AJAX等で動的にページを書き換えるサイトにも応用できそうなので、
変数に入れられるととても便利だと思うんですが如何でしょうか。

引き続きよろしくお願いいたします。

Message#6 2015年3月5日(木)16時47分
From: VBAマスター
返事 削除 変更
今から外出するので簡単に回答します(汗)


↓こちらが今回のクリック処理でjavascriptが利用されています。
<input type="submit"value="OK"class="bt2"id="popOK"onclick="return pdf();">

そして、pdf()の処理を見ると

<script language="JavaScript"><!--
//PDF表示確認POPUP
function pdf(url) {
a=confirm('PDFを表示します。');
if(a) location.href='a.pdf';
else alert('なにもしません');
}
// --></script>

になっています。
処理内容を見るとpopメッセージをした後にpdfファイルのURLへ移動するってことなんで、
クリック処理せずにこのpdfファイルの名前を取得してからnavigateメソッドで読み込めばクリックしなくても処理ができるかと思います。

ファイル名を取得するにはMid関数・Instr関数あたりを利用すればそんなに難しくないでしょう。

もう1つは、クリック処理したあとにsendkyesステートメントでEnterキーを直接送信させる処理です。

この場合は、Enterキーを少しばかり処理をとめてから行うとうまくいくと思います。

Message#5 2015年3月5日(木)00時25分
From: ぶーたん
返事 削除 変更
ぶーたんのメッセージ(#4)への返事

すみません、2箇所訂正です。

×Do While IE.Busy = True Or objIE.ReadyState <> 4

○Do While IE.Busy = True Or IE.ReadyState <> 4

× ’IE.document.Script.setTimeout "javascript:document.getElementById(popOK).click()", 100

○ ’IE.document.Script.setTimeout "javascript:document.getElementById(""popOK"").click()", 100

よろしくお願いします。

Message#4 2015年3月5日(木)00時13分
From: ぶーたん
返事 削除 変更
ご回答ありがとうございます。
説明が不足しておりました。

クリック対象のボタンやリンクにjavascriptのconfirm関数がついていて
そこからポップアップでメッセージが出てきた場合、
処理がそこで止まってしまいます。

そのために非同期処理の必要がありjavascriptを
VBAからsettimeoutで呼び出した次第です。

同期していると、そのあとのポップアップのOKボタンがVBAで押せません。

※こちらはクリックイベントがOKボタンに登録されている場合ですが、
以下のページのような場合です。
http://kamicha1.web.fc2.com/Excel/Test20090726.html

最初に質問させていただいた際に書いた、スクロールの
コードはjavascript内に変数を渡せていましたが、
私が書いたものは変数を入れても動きません。

変数を入れたほうが汎用性があがるので、
そうった旨でご質問させていただきました。
分かりにくく申し訳ありません。

他の部分に問題は無いと思うんですが、
一応コード記載させていただきます。

Sub ieTest()

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 = True Or objIE.ReadyState <> 4
  DoEvents
Loop

’これは問題なく動く
’IE.document.Script.setTimeout "javascript:document.getElementById(popOK).click()", 100

dim id as strign
id="popOK"
IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100

’PostMessage関数かsleep関数+sendkeyメソッドどちらかで、
'ポップアップのOKをクリック

end sub

改めてよろしくお願いします。

Message#3 2015年3月4日(水)22時45分
From: VBAマスター
返事 削除 変更
javascriptの勉強でクリック処理がしたいということですか?

単にクリック処理がしたいのなら、IEのClickメソッドを利用するのが一番はやいですよ。

Test="hoge"
IE.document.getElementById(Test).click

後は、処理前後の内容に間違いがないかHTMLソースにhogeが複数存在していないかなどの確認が必要ですね。

仮にidの"hoge"が2つあった場合は一番最初に処理されるので、2番目をクリックしたい場合はこちらの処理でうまくいきません。

Message#2 2015年3月3日(火)17時30分
From: 通りすがり
返事 削除 変更
一部だけ載せてもどの部分が悪いのかわからんだろ・・・

しいていえばjavascriptでクリックする必要もないかと。

だってVBAでクリックすればいいだけだから!

Message#1 2015年3月3日(火)00時12分
From: ぶーたん
返事 削除 変更
いつも参考にさせていただいております。
javascript操作のサンプルにあるように以下のコードは動きます。

dim high as long
high = "IE.document.body.scrollheight"
IE.document.Script.setTimeout "javascript:scrollTo(0," & high & ")", 100

しかし、以下のコードは動きません。

dim Test as string
Test="hoge" '※存在するID
IE.document.Script.setTimeout "javascript:document.getElementById(" & Test & ").click()", 100

どうすれば動くか教えてください。
よろしくお願いします。

WINDOWS7 EXCEL2013です。

最新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