hirax.net::inside out::2009年07月15日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年6月 を読む << 2009年7月 を読む >> 2009年8月 を読む

2009-07-15[n年前へ]

エクセルのワークシート・ウィンドウだけを半透明化することができるか? 

 「エクセルで電界シミュレーション」と「ウィンドウ半透明化マクロ」で、エクセルのアプリケーションウィンドウ全体を半透明化するマクロを使ってみた。しかし、やはり、「エクセルのアプリケーションウィンドウ全体を半透明化するのではなくて、エクセルのウィンドウの中で開いている特定のワークシートだけを半透明化したい」と感じるに違いない。

 それなら、「エクセルで電界シミュレーション」と「ウィンドウ半透明化マクロ」で使ったVBAマクロの下記の部分を(もちろんWin32 API 関数は定義した上で)、

mywnd=FindWindow("XLMAIN", 
                 Application.Caption)
(たとえばExcel 2003なら)次のように書き換えてやれば良いように思える。
mywnd=FindWindow("XLMAIN", 
                  Application.Caption)
mywnd=FindWindowEx(mywnd,0,"XLDESK",
                   vbNullString)
mywnd=FindWindowEx(mywnd,0,"EXCEL7",
                    ActiveSheet.Name)

 しかし、これは実際には動かない。なぜなら、半透明化=WS_EX_LAYEREDは「親ウィンドウ」しかサポートしていないからである。たとえば、MSDNのWindow Featuresには、

 Note that WS_EX_LAYERED cannot be used for child windows.
とある。つまり、エクセルのアプリケーション・ウィンドウの孫ウィンドウであるワークシート・ウィンドウだけを半透明化させることは(現状では)できない、ということになる。