VBAから即時関数を実行できますか

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

最新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#10 2017年5月25日(木)14時14分
From: 太郎
返事 削除 変更
自分も困っていて解決したので残しておきます
IE11ではこのやり方になるそうです。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13155784783?__ysp=dmJhIGluaXRFdmVudA%3D%3D

Set ev=ie.document.createEvent("HTMLEvents")
ev.initEvent "change", True, True
tag.dispatchEvent(ev)

Message#9 2016年10月21日(金)11時56分
From: moku
返事 削除 変更
ジャッカルのメッセージ(#8)への返事

> javascript処理完了前に次の処理へ移行しているのかもしれないね。
> 一応Application.Wait入れて調整しているようだからもうちょっと時間を入れるとか、
> 取得できなかったら「Goto」でその部分の最初からやり直すとかいれるといいかも。

ありがとうございます。
もう少し試行錯誤してみます。
うまくいったらご報告します。

> > あきらめてWebアプリ側に機能追加をしてもらえないか聞いてみることにします。
> > 実はすでに一回聞いてみたのですが、一蹴されてしまいました(泣)。
>
> だめもとで挑戦したことに敬意!

お褒めに預かり恐縮です。
孤軍奮闘中なのでうっかり涙ぐんだことは秘密です。
Webアプリ側に追加してほしい機能はほんのちょっとしたことなので、
こちらも頑張ってみます。

Message#8 2016年10月20日(木)17時42分
From: ジャッカル
返事 削除 変更
javascript処理完了前に次の処理へ移行しているのかもしれないね。
一応Application.Wait入れて調整しているようだからもうちょっと時間を入れるとか、
取得できなかったら「Goto」でその部分の最初からやり直すとかいれるといいかも。

> あきらめてWebアプリ側に機能追加をしてもらえないか聞いてみることにします。
> 実はすでに一回聞いてみたのですが、一蹴されてしまいました(泣)。

だめもとで挑戦したことに敬意!


> ジャッカルのメッセージ(#6)への返事
>
> > もう試してるかもしれないけど
> >
> > objIE.document.getElementById("items2_Setting").FireEvent ("change")
> >
> > とか、選択してからフォーカスさせるとかでもだめ?
> >
> >
> > sendkeyを使いたくない理由がnumロックのオフになることならオンにする処理をいれるとか。
>
> ジャッカルさん、回答ありがとうございます。
>
> sendkeyを使いたくない理由は原因不明で止まってしまうからなのです。
> 問題のサイトは何個も絞込み条件を入れていくというものでして、
> しかも同じことを何百回も繰り返したいのです。
> どうしても途中で動かなくなってしまいます。
>
> あきらめてWebアプリ側に機能追加をしてもらえないか聞いてみることにします。
> 実はすでに一回聞いてみたのですが、一蹴されてしまいました(泣)。

Message#7 2016年10月20日(木)09時22分
From: moku
返事 削除 変更
ジャッカルのメッセージ(#6)への返事

> もう試してるかもしれないけど
>
> objIE.document.getElementById("items2_Setting").FireEvent ("change")
>
> とか、選択してからフォーカスさせるとかでもだめ?
>
>
> sendkeyを使いたくない理由がnumロックのオフになることならオンにする処理をいれるとか。

ジャッカルさん、回答ありがとうございます。

sendkeyを使いたくない理由は原因不明で止まってしまうからなのです。
問題のサイトは何個も絞込み条件を入れていくというものでして、
しかも同じことを何百回も繰り返したいのです。
どうしても途中で動かなくなってしまいます。

あきらめてWebアプリ側に機能追加をしてもらえないか聞いてみることにします。
実はすでに一回聞いてみたのですが、一蹴されてしまいました(泣)。

Message#6 2016年10月19日(水)18時12分
From: ジャッカル
返事 削除 変更
もう試してるかもしれないけど

objIE.document.getElementById("items2_Setting").FireEvent ("change")

とか、選択してからフォーカスさせるとかでもだめ?


sendkeyを使いたくない理由がnumロックのオフになることならオンにする処理をいれるとか。


> ジャッカルのメッセージ(#4)への返事
>
> > 単純にFocusやacitve、activateあたりを間に入れても処理されない?
> >
> >
> > > できればSendkeyを使いたくないので、他の方法はないでしょうか。
>
> ジャッカルさん、回答ありがとうございます。
>
> objIE.document.getElementById("items2_Setting").Activeと
> objIE.document.getElementById("items2_Setting").Activateを実行すると、
> 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」のエラーになりました。
>
> objIE.document.getElementById("items2_Setting").Focusを実行するとエラーにはなりませんが、
> 事態は変わらないです(イベントは発生せず、隣のリストボックスに変化なし)。
>
> せっかく教えていただいたのに・・・。
>
>
>
> なお、よく見たら私の最初の質問文の間違いがありました。
>
> ×リストボックス(id=items2_text)
> ○リストボックス(id=items2_Setting)

Message#5 2016年10月19日(水)09時51分
From: moku
返事 削除 変更
ジャッカルのメッセージ(#4)への返事

> 単純にFocusやacitve、activateあたりを間に入れても処理されない?
>
>
> > できればSendkeyを使いたくないので、他の方法はないでしょうか。

ジャッカルさん、回答ありがとうございます。

objIE.document.getElementById("items2_Setting").Activeと
objIE.document.getElementById("items2_Setting").Activateを実行すると、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」のエラーになりました。

objIE.document.getElementById("items2_Setting").Focusを実行するとエラーにはなりませんが、
事態は変わらないです(イベントは発生せず、隣のリストボックスに変化なし)。

せっかく教えていただいたのに・・・。



なお、よく見たら私の最初の質問文の間違いがありました。

×リストボックス(id=items2_text)
○リストボックス(id=items2_Setting)

Message#4 2016年10月18日(火)17時07分
From: ジャッカル
返事 削除 変更
単純にFocusやacitve、activateあたりを間に入れても処理されない?


> できればSendkeyを使いたくないので、他の方法はないでしょうか。

Message#3 2016年10月17日(月)14時57分
From: moku
返事 削除 変更
できればSendkeyを使いたくないので、他の方法はないでしょうか。

Message#2 2016年10月17日(月)11時23分
From: moku
返事 削除 変更
まだ即時関数を実行する方法は分かりませんが、
WSオブジェクトのSendKeysメソッドを使って
イベントを起こすことができました。
SendKeysはあまり使いたくないですが。

ちなみにVBAのSendKeysステートメントでは
うまくいきませんでした。
理由はわかりません。

Dim wobj As Object
Dim WSオブジェクト As Object
Set WSオブジェクト = CreateObject("WScript.Shell")

Set wobj = IE.document.getElementById("items2_Setting") 'items2_Settingにフォーカスを移す
wobj.Focus
Application.Wait Now + TimeValue("00:00:01")

WSオブジェクト.SendKeys (" ") 'スペースキーを送る
Application.Wait Now + TimeValue("00:00:01")

WSオブジェクト.SendKeys ("{DOWN}") '↓キーを送る
Application.Wait Now + TimeValue("00:00:01")

Message#1 2016年10月13日(木)10時24分
From: moku
返事 削除 変更
いつも楽しく勉強させていただいております。
環境はWin7でIEは11、Officeは365です。

HTMLやJavaScriptはほとんど書いたことがないので、適切でない表現がありましたらお許しください。

あるリストボックス(id=items2_text)に値を設定した後でイベントを起こしたいのですが、うまく行きません。
items2_textが変更になるとその隣のリストボックスの選択肢が変わる仕様です。

この手の仕様ですとリストボックスにonchangeイベントが書いてあって関数名が記述してあるケースが多いと思います。
その場合はobjIE.document.getElementById("items2_Setting").FireEvent ("onchange")としたり、
objIE.navigate "JavaScript:XXXX()"のように直接関数名を指定したりしてきました。
ところがこのリストボックス(id=items2_text)にはその記述がないのです!!

ソース全体を見てみるとこんな記述がありました。

$(function(){
$("#items1_Setting,#items2_Setting,#items3_Setting,#items4_Setting,#items5_Setting").change(function(){

省略

});
});

検索してみたのですが、これはおそらく即時関数という関数だと思います。
items2_Settingその他のリストボックスの値が変更になったらこれが実行されるのだろうと想像します。

即時関数や無名関数以外の名前のある関数なら、VBAからは関数名を指定して実行できますが、
即時関数の場合はどのように呼び出せばよいのでしょうか。

もしくは「VBAから即時関数は呼び出せない」のでしょうか。

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