- ベストアンサー
DOSコマンドを使用してExcelファイルのhWndを取得する方法
- セキュリティの問題上、VBA以外のアプリを利用できない環境で100個のExcelマクロを実行しなければならない場合、DOSコマンドを使用してExcelファイルのhWndを取得する方法について教えてください。
- マクロを有効にするのを自動化するために、フォルダ内のExcelファイル名を配列に格納し、それぞれのファイルに対してDOSコマンドを実行してExcelファイルを開く方法を教えてください。
- VBAでAPI関数を使用してマクロを有効にする方法についても教えてください。
- みんなの回答 (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 を使って同期をとれば良いかと思います。
その他の回答 (1)
- tsukasa-12r
- ベストアンサー率65% (358/549)
どちらもあまり効率がよくありませんが、 (1) API の EnumWindows() を使用して、ウィンドウキャプションを比較してポップアップウインドウを検索する。 (2) API の GetWindow() を使用して、デスクトップの hWnd → Excel の hWnd → ポップアップウィンドウを取得。 の方法で取得可能だと思います。 (2) の方法については、 http://oshiete1.goo.ne.jp/qa3252966.html を参考にしてみてください。
お礼
有難う御座います、見当が付きました 試して見ます。
お礼
Excelから他ブックをOPENさせた時の挙動を 検証せずダイアログボックスが表示される事とばかり に決め付けていました 有難う御座います、試して見ます。