2015/03/13

excel2013の SDI困りました

 いやexcel2013のSDI困りました。
 これは普通に表計算ソフトとして使う分には何も問題ないのですが、VBAから使うには、すべてがトップレベルウィンドウとなるため何かと調整が必要になることがわかりました。
 例えば次のコードがあったとします。
 Excelを非表示化して別エクセルシートを開く処理です。
Application.Visible = False
Workbooks.Open ( "c:\temp\ほげほげ.xls" )
 非常に短いコードです。
 Excel2010までは、MDIなので、Applicationは一つのトップレベルウィンドウで、その配下に各種ワークブックが存在する形式になっています。
 そのため1行目でVisible = Falseとした相手はトップレベルウィンドウなので、2行目のほげほげ.xlsは開いたとしても表示上は非表示のままです。
 しかしながらExcel2013から標準となったSDIではすべてがトップレベルウィンドウなので、1行目のVisible =Falseに関係なく、2行目のほげほげ.xlsは表示されてしまいます。
 この仕様は、内部的に各種ファイルを読み込んで動作しようとする処理では非常に問題になってきます。
 見た目ならまだしも、ユーザから触られたくないから非表示にしている制御なんかだと、勝手に触られてしまい、プログラムとしては目も当てられない結果となることも想像できます。
 いや困りました。
 少々気味が悪いなぁとおもっていたSDIですが、やっぱり何らかの対処をさせられる羽目になりましたねぇ。
 MSと付き合うのも大変です。
 また対処方法がわかったらアップします。

Excel2013でWorkbooks.Openを最小化表示するにはの方法で対処出来ました。

0 コメント:

コメントを投稿