home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

日記/2009/01/05/ExcelVBAでUserFormをリサイズ可能にする方法

作成日: 2009-01-05 15:07:01   /   last updated at: 2009-01-05 15:24:57
カテゴリ: Windows 

お手伝いで調査を頼まれて、無事見つかったのでメモ。

ExcelのVBAでUserFormを表示しているのだけれど、リサイズできなくて困ってるとのこと。
→Win32APIで解決。

・「エクセルでフォームを自在に作る方法」
http://questionbox.jp.msn.com/qa1258692.html

・「【36270】画面サイズ変更を実現させるには?」
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=36270;id=excel

・「UserForm Resize」
http://www.xtremevbtalk.com/archive/index.php/t-196301.html

基本的な流れは、

  1. FindWindow()/GetActiveWindow()でUserFormのウインドウハンドルを取得。
  2. GetWindowLong(hWnd, GWL_STYLE)でウインドウのスタイルを取得。
  3. 上で取得した値に、WS_THICKFRAMEをORしてSetWindowLongする。

ここまでできれば、UserForm_Resize()のイベントハンドラで色々好きなように調整できるようになります。
なおAPIを呼ぶタイミングは・・・

  • Initializeイベント:FindWindowでウインドウのCaptionから取得。
  • Activateイベント:GetActiveWindowで取得。

という使い分けになります。

original url: https://www.glamenv-septzen.net/view/145