
Excel VBA において UserForm がデフォルトではワークシートの前面に
必ず表示されるのですが、ユーザーからどうしても邪魔だという要望があり、
対応せざるを得ない状況となってしまいました。
そこで、Excel ワークシートの Window の背面に持っていけるように
するにはどのようにしたら良いでしょうか。
ワークシート上に UserForm で使っているボタンを設置するという代替案は
ここでは除外させて下さい。
どなたかよろしくお願い致します。
No.3ベストアンサー
- 回答日時:
ExcelのUserFormはPopupWindowですので Excelの背面にはどうやっても出来ないと思います
SetParentで親ウィンドウのExcelと切り離して
SetWindowLongでウィンドウスタイルをOVERLAPPEDWINDOWなどに変更しても背面への指示には従いません
UserFormの作成に ShowOwneredPopupsあたりが使われ UserFormのOwnerWindowがExcelに設定されているためだろうと思います
#1氏の最小化案が 現実解のような気がします
最大化を無効にするなら
nStyle = nStyle Or WS_MINIMIZEBOX
nStyle = nStyle And (Not WS_MAXIMIZEBOX)
といった具合で 付け加えたい場合は Or演算子
削除したい場合は 削除する項目のNotと And演算を取りましょう
大変ありがとうございます。正にその通りです。
私のシステムでは Excel の各 Window の×ボタンを消去するルーチンを
見様見真似で作って組み込んでいまして、無効化していた WS_SYSMENU を
復活させ、WS_MINIMIZEBOX を追加して、見事 UserForm に Window の
最小化ボタンを実現することができましました。
考えてみれば大ボケしてた気がします。
しかし、その代わり×ボタンも復活してしまいました。
redfox63 様、脱線しますが×ボタンのみの消去 or 無効化方法をご存じでしたらご教授下さいませんでしょうか。
No.4
- 回答日時:
フォームのクローズボタンは システムメニューの『閉じる』に連動しているのでこれを削除してやれば無効になります
残念ながら 非表示にするのは無理だったように思います
hMenu = GetSystemMenu( hWnd, FALSE )
DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND
で可能でしょう
ただ、この状態ですと タイトルバーの再描画がされていないのでまだ閉じるボタンのみの表示になります
UserForm1.Hide
DoEvents
USerForm1.Show vbModeless
とか
SendMessage hWnd, WM_NCPAINT, 1, 0
または
UserForm1.Width = UserForm1.Width + 1
などを実行してフレームを再描画しましょう
APIなどでハンドル(hEdit,hWnd,hMenu)を取得した場合は本当に有効なハンドルかどうかをチェックしてから使いましょう
たいてい無効なハンドルの場合 0が返ってきます
APIにより仕様が違う場合があるので MSDNやネットなどで調べましょう
この度は大変お世話になりました。
後ほど×ボタンの件、試してみたいと思います。
いろいろな意味で見通しがつき、助かりました。
また何かの機会がございましたらよろしくお願い致します。
No.2
- 回答日時:
UserForm のプロパティで "ShowModal" という項目があるのですが
デフォルトで "True" になっているところを "False" にすると
モードレスダイアログとして表示してくれますが・・・
最初は前面に表示されるかな。
回答ありがとうございます。モードレスできちんとワークシートに
入力できますが、問題は入力するときに UserForm が邪魔なのです。
入力する時いちいち UserForm を横にずらさないといけないし、
しかも常時前面にいるので目障りなのだそうです。
せめて Show したときに出現の場所の指定ができればいいのですが・・・
No.1
- 回答日時:
回答ありがとうございます。助かります。
これは正確には「最小化」ではなく擬似的に「たたむ」
というものですね。問題の解決にはなりそうです。
しかし、もし最小化での対応なら、やはり見栄えの統一の
ためにも、Window の右上に最小化のボタンを作りたいものです。
そうするとやはり API の知識が必要となるでしょう。
勉強しなければならないところですが、もし効率のよい勉強方法、
または具体的実装方法ありましたら、表題とは外れますが、
どうかよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba UserFormを前面に出す方法を教えてください 1 2023/08/17 11:08
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/25 11:42
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Excel(エクセル) 「Excelのオプション」の「ユーザーインターフェイスのオプション」の設定値をVBAで取得したい 1 2022/07/31 23:49
- 会計ソフト・業務用ソフト Excelの二画面表示でマウスホバーするだけでスクロール 1 2023/02/27 11:00
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) Excel 散布図グラフ 外れ値 セル番地参照方法 4 2022/04/19 18:56
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) vba 同じブック内での転記について 4 2023/01/15 14:42
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
Vba UserFormを前面に出す方法を教えてください
Visual Basic(VBA)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
VBA、UserFormを前面に出力してから処理後にももう一度前面に出したい
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
Vba Userformを前面に出すについて
Access(アクセス)
-
8
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
9
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
10
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
11
ExcelVBAでフォーム内でブックを開くとフォームが隠れてしまう
Visual Basic(VBA)
-
12
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
13
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
14
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
15
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
16
UserForm1.Showでエラーになります。
工学
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
最大化と最小化ボタン
-
Console.WriteLine で表示されない
-
[VBA] UserForm を Excel の W...
-
EnumChildWindowsの使い方(VBA)
-
作成したウインドウのサイズを...
-
OutlookでRSSフィードやメモの...
-
MFCでハンドルを取得するには
-
VBAで単一ブック複数窓を閉じる...
-
Vba LongPtrについて教えてくだ...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
Msgboxの変数の表示につ...
-
ラジオボタンの初期指定
-
MFCアプリケーションでアイコン...
-
C#でファイル転送プログラムWin...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
Vba LongPtrについて教えてくだ...
-
勝手にウィンドウが開いて止ま...
-
ラジオボタンの初期指定
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
Excelの上下を固定したい
-
「&HFFFF」「&H1A」とは?
-
ExcelのBOOKが消えた!
-
エクセルで1行目から3行目が消...
-
[VBA] UserForm を Excel の W...
-
【VB2008】 マウス操作の一時的...
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
DellノートPC購入で悩んでいま...
-
UWSCで特定のChromeのタブをア...
-
Alt+P,Alt+NをPostmessageで送...
-
隠れたウィンドウの画面をキャ...
-
Console.WriteLine で表示されない
おすすめ情報