[[20130522163341]] 『VBAでIE操作』(あや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでIE操作』(あや)

 Excel2003 XP IE9

 javascriptを使って作られた IEで動いているシステムがあり、
 繰り返し作業はVBAで自動化させようとしています。

 IE上にPDFが表示されている画面があり、
 その画面を印刷しようとしています。
 (アクロバットリーダーの上に表示されているのではなく、
 左上のアイコンは、IEでその中にPDFが表示されています)

 マウスで操作の場合は、
 IE上に表示されたPDF画面にある
 プリンタのアイコンをクリックし
 (ファイル(F) 編集(E)などの文字がないので)
 印刷ダイアログが出るので OKを押して 印刷しています。

 そこをVBAで操作をしており、
 ダイアログまでは出ましたが
 OKが押せません。

 ↓ダイアログまで出る記述↓

 Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

  ’該当のIEウィンドウを選択しObjIEに入れる
         For Each Windw In CreateObject("Shell.Application").Windows
             If Windw.LocationURL = "http://○○○○" Then

                     Exit For

             End If
         Next

         Set ObjIE = Windw
         SetForegroundWindow (ObjIE.hwnd)
         Call sWait(Obj)
    
  ’印刷
         ObjIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
         -----☆

         Call sWait(Obj)
         Call sWait(Obj)
         Call sWait(Obj)
         Call sWait(Obj)
         Call sWait(Obj)

         SendKeys "{ENTER}"

 ☆のところで、印刷ダイアログは出ます。
 印刷ダイアログにあるプレビューの読み込みに時間がかかるので
 しばらく待って、SendKeysを使ってみましたが
 画面反応なしでした。

 ちなみに、フォーカスは印刷ダイアログにあります。
 キーボードでEnterを押すと、印刷は出来ます。

 どのようにしたら良いでしょう?

 印刷に関して参考にさせてもらったのは、
 http://ie.vba-ken3.jp/Methods/ExecWB/
 です。

 IEに表示された普通のwebページであれば、
 ObjIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
 を実行すると、すぐに印刷ができます。
 (印刷ダイアログは出ません)

 *いろいろ教えていただいて、組み合わせて使わせてもらっています…


 続けて投稿すみません。

 書き込んでから考えてたのですが
 [[20130521114840]] と似た感じで

 javascriptで送ってからSendkeysだとうまくいくのかな?

 ためしてみます。

 (あや)

 最初からそのように説明されていると、目的が分かりやすかったと思いますが、
 対象となる PDF は静的なファイル(サーバにある?)でしょうか?
 それとも操作によって動的に作成されるものでしょうか。

 いずれにしても、手動でかまいませんが、PDF をローカルに保存することは出来ますか?
 一度に印刷が難しくても、一旦ファイルとして保存して一括印刷のような
 手段もありそうに思えました。

 参照されているKen3さんのところですけれど、こんなのもありますね。
http://www.ken3.org/vba/backno/vba120.html
 一括印刷も検索すればいろいろと見つかりそうです。
http://dekiru.impress.co.jp/contents/045/04557.htm

 新しい方法に切り替えるのが却って手間取りそうでしたら、読み飛ばしてください。
 (Mook)

ちょっとだけコメント。
HTMLの同期のために作成したsWait()ですが、単に長時間待ちたいだけならば、
Sleep APIを直接使用すると良いですよ。

それと、2つ目のIEオブジェクトがObjIEならば、sWait(ObjIE) ではないですか?
(???)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.