[三流君]
[VBAで楽しく]
[VBA IE 操作]
−−> No.112 IE 操作 .ExecWB でコマンド実行(検索したかったけど)
IE 操作 .ExecWB でコマンド実行(検索したかったけど)
メルマガ発行内容
<IE 操作 .ExecWB でコマンド実行(検索したかったけど)>
どうも、三流プログラマーのKen3です。
今回は、
掲示板とメールでもらった質問を処理するために、
IEのコマンドボタンを使う.ExecWBをイタズラしたそんな話です。
結局、出来なかったんだけど、途中経過を楽しんでね。
※事前調査でつまずく、そんな例です。
/*
* 1.今回のキッカケ
*/
掲示板に下記の質問をもらいました。
http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi
----
>タイトル:VBAからIEの検索を表示したい
>
>教えてください。
>環境(EXCEL2000)
>EXCELからIEを立ち上げたときに「WEB ページの検索」を
>常に表示させたいのですが?
>ショートカットキーは、Ctrl + E ですが、
>同処理をVBAでは、どのようなコードになりますか。
>教えてください。
>宜しく、お願いします
----
IEでCtrl + Eを押した状態にする方法
と
メールで、
----
>アクセス2000の環境で、activeXにて、アクロバットリーダ
>6 を挿入しました。(アクロバット直接ではなく、Ie6
>からPLUGINです)
>
>それで、WEBからPDFファイルを引っ張ってきていますが、
>このあと、そのPDFファイルを検索したいのです。
>
>アクロバットの検索メニューからデータを入力すればOK
>なのですが、これをAccessのフォームをクリックしてアク
>ロバットに送り、自動的に検索したいのです。
>
>アクロバットではJavaScriptがあると聞いていますが、
>VBAでなんとかいきませんか。
>何かヒントをいただければ幸いです。
----
こっちは、検索のウインドウを自動ですね。
/*
* 2.事前調査、テスト
*/
どちらも共通しているのは、IEの機能(ボタン)なので、
そのあたりから探ってみます。
IE Command で検索すると、
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/methods/execwb.asp
が検索される。
object.ExecWB( _
cmdID As OLECMDID, _
cmdexecopt As OLECMDEXECOPT, _
[pvaIn As Variant,] _
[pvaOut As Variant])
Parameters
cmdID
Long that represents the identifier of the command to execute.
For more information on command identifiers, see MSHTML Command Identifiers.
cmdexecopt
OLECMDEXECOPT value that specifies the command options.
pvaIn
Optional. A Variant used for specifying command input arguments.
pvaOut
Optional. A Variant used for specifying command output arguments.
で、ここが使えるコマンドかぁ。
http://msdn.microsoft.com/library/en-us/com/htm/oen_a2z_22sk.asp
うわ、いっぱいあるよ・・・
typedef enum
{
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20,
OLECMDID_UPDATECOMMANDS = 21,
OLECMDID_REFRESH = 22,
OLECMDID_STOP = 23,
OLECMDID_HIDETOOLBARS = 24,
OLECMDID_SETPROGRESSMAX = 25,
OLECMDID_SETPROGRESSPOS = 26,
OLECMDID_SETPROGRESSTEXT = 27,
OLECMDID_SETTITLE = 28,
OLECMDID_SETDOWNLOADSTATE = 29,
OLECMDID_STOPDOWNLOAD = 30,
OLECMDID_ONTOOLBARACTIVATED = 31,
OLECMDID_FIND = 32,
OLECMDID_DELETE = 33,
OLECMDID_HTTPEQUIV = 34,
OLECMDID_HTTPEQUIV_DONE = 35,
OLECMDID_ENABLE_INTERACTION = 36,
OLECMDID_ONUNLOAD = 37,
OLECMDID_PROPERTYBAG2 = 38,
OLECMDID_PREREFRESH = 39,
OLECMDID_SHOWSCRIPTERROR = 40,
OLECMDID_SHOWMESSAGE = 41,
OLECMDID_SHOWFIND = 42,
OLECMDID_SHOWPAGESETUP = 43,
OLECMDID_SHOWPRINT = 44,
OLECMDID_CLOSE = 45,
OLECMDID_ALLOWUILESSSAVEAS = 46,
OLECMDID_DONTDOWNLOADCSS = 47,
OLECMDID_UPDATEPAGESTATUS = 48,
OLECMDID_PRINT2 = 49,
OLECMDID_PRINTPREVIEW2 = 50,
OLECMDID_SETPRINTTEMPLATE = 51,
OLECMDID_GETPRINTTEMPLATE = 52
} OLECMDID;
OLECMDEXECOPTのパラメータはここ、
http://msdn.microsoft.com/library/en-us/com/htm/oen_a2z_5k38.asp
を参照すると
typedef enum
{
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
LECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
} OLECMDEXECOPT;
と、書いてある。
※なんとなくわかりそうな英単語のような、違う意味のような・・・
危なく無さそうな、印刷プレビューのコマンドで実験してみます。
Sub ie_test()
Const OLECMDID_PRINTPREVIEW = 7 '参照設定している場合は不要です
Const OLECMDEXECOPT_DODEFAULT = 0 'テストなので、
Dim objIE As Object 'IEオブジェクト参照用
Dim a, b 'ダミー変数
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
objIE.GoHome
'表示終了まで待つ(ビジーの間ループする)
Do While objIE.Busy = True
DoEvents '何もしないループ(笑)
Loop
'IEのメニューコマンドを実行する(7番のコマンド)
objIE.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT
End Sub |
使用方法・ポイントは特に無く、
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'IEのメニューコマンドを実行する(7番のコマンド)
objIE.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT
と、
定数を渡しただけで、初期ページのプレビューが表示されました。
※頭でConst OLECMDID_PRINTPREVIEW = 7を定義してますが、
MicroSoft Internet Controls を参照設定してあれば、
そんなことしないので、注意してくださいね。
↑実験結果。
/*
* 3.検索関係を探る
*/
質問は検索の窓だよね、それらしい英単語をコマンド一覧から探すと、
OLECMDID_SHOWFIND = 42,
これなんて、あやしいよね、SHOW FIND かぁ
あと、
OLECMDID_FIND = 32,
なんかは、そのまま、検索コマンドのような気がする。
'IEのメニューコマンドを実行する(42番のコマンド)
objIE.ExecWB OLECMDID_SHOWFIND, OLECMDEXECOPT_DODEFAULT
と、組み込んでテストしてみました。
テストで実行(心の中では、楽勝ムードだったが・・)
あらら、実行時エラー・・ExecWBメソッドは失敗しました・・だってさ・・
↑デバックメッセージ。
objIE.ExecWB OLECMDID_SHOWFIND, OLECMDEXECOPT_DODEFAULT
何がおかしいのか・・・
よし、ここは、他力本願、OLECMDID_SHOWFINDをキーワードに検索するぞ。
※エラーになった関数で検索して、人様の成功例を探す、
そんな学習方法もアリですよ。
でも、見つからない・・みなさん、
.ExecWB OLECMDID_SHOWFIND
なんて、使わないのか・・・・
/*
* 4.SendKeysで逃げた
*/
印刷プレビューのテストが出来たので、
IEのコマンド操作、簡単だと思ったけど、
何かがおかしく、検索のウインドウを表示できなかった。
しかたがない、いつもの、古典的な手法、SendKeysで逃げます。
Sub ie_test_検索()
Const OLECMDID_SHOWFIND = 42 '参照設定している場合は不要です
Const OLECMDEXECOPT_DODEFAULT = 0 'テストなので、
Dim objIE As Object 'IEオブジェクト参照用
Dim a, b 'ダミー変数
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
objIE.GoHome
'表示終了まで待つ(ビジーの間ループする)
Do While objIE.Busy = True
DoEvents '何もしないループ(笑)
Loop
'IEをアクティブにする。
AppActivate "Microsoft Internet Explorer"
SendKeys "^f", True 'Ctrl+Fをアクティブなアプリへ送る
End Sub |
同様に、
'IEをアクティブにする。
AppActivate "Microsoft Internet Explorer"
SendKeys "^e", True 'Ctrl+Eをアクティブなアプリへ送る
でCTRL+Eを送ると、
左側に、検索のフレームが表示されます。
/*
* 5.終わりの挨拶
*/
う〜ん、スッキリしないが、
何かの参考となれば幸いです。
Excel/Access大好き、三流プログラマーKen3でした。
フィードバック
VBA系の→[掲示板]←を覗く、質問を書き込む
ページフッター(リンクや広告など)
[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列
書籍の購入
Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??
コンピュータ書籍の発送がハヤイ専門店
コンピュータの本・専門店
|
※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり
|
amazon.co.jpでキーワード別チェック
下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・