Excel (VBA)

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

 
(Windows 10 Pro : その他)
ExcelとWordでウィンドウハンドルが取得できたりできなかったりする
投稿日時: 20/07/14 18:39:19
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
「Cube PDF」というソフトを使用してPDFにしているのですが、別ウィンドウで表示される為、下記コードを使ってウィンドウハンドルを取得しアクティブにして処理をすすめています。
対象がExcelファイルだとアクティブになりますが、Wordファイルだと正しくウインドウハンドルが取得できません。
(Wordだとブレークポイントで止めないと、CubePDFが起動いているのにタスクになく(debug.printで確認)、ブレークポイントで止めて再度タスクがあるかdebug.printで確認すると取得はできているが、それを元に取得したウィンドウハンドルは異なっている。「実際のウィンドウハンドルは何のか??」と思い、sleepで時間稼ぎをしている間に手動でCubePDFをアクティブにして「GetForegroundWindow()」で確認するとウィンドウハンドルが違う番号で、それを使うとアクティブになる。)
 
Wordファイルだと同じ方法が使えないのか解決方法が見出せず、書込み致しました。
ご助言をいただけると幸いです。
 
宜しくお願い致します。
 
〔↓ウィンドウハンドルを取得する為に使っているコード〕
Set appWord = CreateObject("Word.Application")
                             
Sleep 2000
                             
For Each task In appWord.Tasks 'Word VBAのTasksコレクションを調べる(この機能はWordにしかない)
                 
 If task.Visible = True And InStr(task.Name, "CubePDF") > 0 Then 'タスク(プロセス)が実行中でキャプションに「CubePDF」が含まれていたらキャプション名取得
    CaptionName = task.Name
    Exit For
 End If
Next
               
   myHwnd = FindWindow(vbNullString, CaptionName)
   SetForegroundWindow myHwnd 'CubePDFのウィンドウをアクティブ化
                           
'CubePDFで指定のパスに保存できずデフォルト(デスクトップ)で保存されてしまうので、デスクトップに保存されたファイルを本来の保存場所へ移動させる
       With CreateObject("Wscript.Shell")
             .SendKeys "{ENTER}"
       End With

回答
投稿日時: 20/07/15 06:21:32
投稿者: takesi

印刷開始してから表示(作成)されるウインドウであれば
ウインドウが表示されるより処理が先行してしまってはいないでしょうか?
 
1.DoEventsをいれて他の処理を待つ
2.「CubePDF」が含まれるキャプション名が見つかるまで繰り返す。
3.見つからなければタイムアウトする。

トピックに返信