• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DOSコマンドで実行させたプログラムのhWndの取得方法)

DOSコマンドを使用してExcelファイルのhWndを取得する方法

このQ&Aのポイント
  • セキュリティの問題上、VBA以外のアプリを利用できない環境で100個のExcelマクロを実行しなければならない場合、DOSコマンドを使用してExcelファイルのhWndを取得する方法について教えてください。
  • マクロを有効にするのを自動化するために、フォルダ内のExcelファイル名を配列に格納し、それぞれのファイルに対してDOSコマンドを実行してExcelファイルを開く方法を教えてください。
  • VBAでAPI関数を使用してマクロを有効にする方法についても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> (3)VBAでDOSコマンドを実行→Excelファイルを開く VBA を使える環境にあって、何故 DOSコマンドなのでしょうか? 単純に起動用のブックをつくれば良いだけでは? 「マクロを有効にする?」の警告ダイアログが表示されるのは、手動操作 によってブックを開くときのみです。 VBA や WHS からマクロ付きブックを開いても警告ダイアログは表示されず、 サクっと開くはずですが・・ 動かしたいものが Workbook_Open とか Auto_Open などの自動実行マクロ ということなら、シンプルにこんな感じで。 Sub Sample()   Dim xlWb As Workbook   Dim i As Integer   For i = 1 To 100     Set xlWb = Workbooks.Open("C:\Test" & Cstr(i) & ".xls")     ' Auto_Open 等のマクロが自動実行される     ' その自動実行マクロが完了するまで、こちら側は待機     xlWb.Close SaveChanges:=True   Next i   Set xlWb = Nothing End Sub 上記コードは Excel VBA ですが、WSH でも同じことは可能でしょう。 ただ、処理の内容にもよるかもしれません。 非同期処理(マクロが完了しても Excel が動き続けている処理。代表的 なものは Webクエリー絡み)が含まれる場合は、上記の方法では全ての Excel の動作が完了する前にブックを閉じてしまうかもしれません。 対処法としては別プロセスの Excel 側でブックを開くようし、 WaitForInputIdle API を使って同期をとれば良いかと思います。

konchikisho
質問者

お礼

Excelから他ブックをOPENさせた時の挙動を 検証せずダイアログボックスが表示される事とばかり に決め付けていました 有難う御座います、試して見ます。

その他の回答 (1)

回答No.1

どちらもあまり効率がよくありませんが、 (1) API の EnumWindows() を使用して、ウィンドウキャプションを比較してポップアップウインドウを検索する。 (2) API の GetWindow() を使用して、デスクトップの hWnd → Excel の hWnd → ポップアップウィンドウを取得。 の方法で取得可能だと思います。 (2) の方法については、 http://oshiete1.goo.ne.jp/qa3252966.html を参考にしてみてください。

konchikisho
質問者

お礼

有難う御座います、見当が付きました 試して見ます。