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.とある。つまり、エクセルのアプリケーション・ウィンドウの孫ウィンドウであるワークシート・ウィンドウだけを半透明化させることは(現状では)できない、ということになる。