Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : その他)
IsWindowEnabledは、Application.hWndで取得した番号を使えないのか?
投稿日時: 20/11/20 12:38:06
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
拡張子がtifファイルの一括印刷マクロを作成しています。
(フォルダ内に大量にあり。)
 
Application.hWndで印刷画面のウィンドウの前面化とSendKeysも効いたので、印刷画面のウィンドウが閉じたかどうかをIsWindowEnabledと取得したApplication.hWndで判別しようと思ったのですが、印刷画面ウィンドウが閉じられた状態でも0を返してきます。
(ちなみにtifは「ウィンドウズフォトビューアー」で開き、印刷画面ウィンドウは印刷が終わると自動的に閉じます。ウィンドウが自動的に閉じられるものの、印刷ウィンドウが閉じた判別をした後に次の印刷指示をかけた方が良い状態です。(印刷される順番等を鑑みて))
 
他のAPIを使うとかしかないのでしょうか?
ネットで調べながら作っているので、基本が分かっておらず恐縮ですが、アドバイスをいただけると幸いです。
宜しくお願い致します。
 
ちなみに、tifの印刷指示は下記のようにしています。
 
Call ShellExecute(Application.hWnd, "print", myFile, vbNullString, "", 0)
                                 
    SetForegroundWindow (Application.hWnd)
    Sleep 1000 '念の為待機時間
    SendKeys "{ENTER}"

回答
投稿日時: 20/11/20 15:24:24
投稿者: Suzu

その画像が、どのくらいの数あるのか、印刷対象/非対象 があるのか判りませんが
VBAを使用して印刷をするという事は、Excelは使えなくなりますよね。
 
それよりは、普通に画像ファイルを複数選択し、「印刷」では駄目なのでしょうか。
 
印刷対象が、複数フォルダに跨るのであれば
ワークフォルダを作成し、フォルダ内にコピーするまでをVBAで行い、印刷はユーザーに任せるとか。
 
或いは、ファイラーなり、別のビュワーを使用する事は採用できませんか?

投稿日時: 20/11/20 15:37:35
投稿者: Alice87

Suzu様
 
早速のコメントありがとうございます。
 
>印刷はユーザーに任せるとか。
→ルーティン作業ですが、一つのフォルダ内に約100のtifファイルがあり(そのようなフォルダが複数あり)、それを人力ではなく、省力化させる為にマクロを作成しているのです。
 
--------
 
GetWindowTextを使って印刷画面のタイトルを取得して判別させようとも考えましたが、やってみたところGetWindowTextで取得したのは、tifファイル一括印刷するマクロを作成しているExcelファイルのタイトルでした。
(なので、印刷画面が消えてもIsWindowEnabledで1が返ってくることに合点がいきました。そうなるとなぜ印刷画面上のボタンを押す為に使ったSendKeys "{ENTER}" が活きたのか?と思いましたが。)
 
「画像の印刷」と左上に表示される画面が消えたかどうか判別する方法で、何か思い当たる方法がありましたら引き続きアドバイスをお待ちしています。
 
何卒宜しくお願い致します。
 
 
 
 
 

回答
投稿日時: 20/11/20 15:47:31
投稿者: Suzu

ShellExecute なので、アプリケーションを指定している訳ではないのですよ。
 
ShellExecute に ファイルパスを渡す事で、
 
渡したファイルの拡張子に基づき、そのファイルに 関連付けられた アプリケーション を起動。
print 引数で【印刷】 を指定しています。
 
Windowsのファイル関連付けに依存しているので。。
 
 
 
私は、拡張子が違う多数のファイルを一度に印刷する際に、
プリンターのジョブ一覧を表示するウィンドに
ファイルをドラッグアンドドロップしてしまいます。
 
これであれば、ファイルを投げるだけなのですがね。。
 
これをVBAでできるか。。
出来たとしても、印刷しますか? 旨のメッセージが出てくるので、その制御もするとなると。。
ちょっと私には荷が重いです。
 
・プリンタの キューウィンドの表示
・エクスプローラーにて、フォルダを表示し、ファイル全選択
までであれば、VBAでもできそうですが。

回答
投稿日時: 20/11/20 15:50:50
投稿者: Suzu

WEB検索をしてみても
質問者さんと同じ様に フォトビュアー を APIを使って制御したいと思う方はいらっしゃいますが
APIの戻り値の関係で難しい と言うのが殆どですね。

投稿日時: 20/11/24 10:01:04
投稿者: Alice87

suzu様
 
続けてコメントを書いて下さり、ありがとうございます。
 
こちらのカテゴリの別の投稿で「印刷スプールが終了したか判定する方法は?」で解決策が得られましたら、この投稿であげた「印刷画面ウィンドウ」が閉じたか判別せずに、上記の方法で次のファイルへうつれるようにしようと考えています。
 
詳しい方から見て「実現させるには、難しい」等々のコメントをいただけると、考え方の方向転換もできますので、大変ありがたいです。

トピックに返信