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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
Vba Userformを前面に出すについて
Access(アクセス)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
VBA、UserFormを前面に出力してから処理後にももう一度前面に出したい
Visual Basic(VBA)
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
9
EXCELのコンボボックス 配置の縦位置の変更はどうすれば?
Windows Vista・XP
-
10
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
11
フォームを最背面に設定したいのですが・・・
Visual Basic(VBA)
-
12
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
13
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
14
UserForm1.Showでエラーになります。
工学
-
15
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
16
ExcelVBAでフォーム内でブックを開くとフォームが隠れてしまう
Visual Basic(VBA)
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
フォントの大きさ
Visual Basic(VBA)
-
19
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
20
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
MFC ダイアログ→MDI風に変更
-
勝手にウィンドウが開いて止ま...
-
エクセルで保存したものを開く...
-
ExcelのBOOKが消えた!
-
ゲームでは結局どっちが良いの?
-
グラフを別ウィンドウで立ち上...
-
[VBA] UserForm を Excel の W...
-
Console.WriteLine で表示されない
-
Vba LongPtrについて教えてくだ...
-
隠れたウィンドウの画面をキャ...
-
focusメソッドを使ってもカーソ...
-
MFC ダイアログ上のID取得につ...
-
ブック構成の保護
-
UWSCで特定のChromeのタブをア...
-
EnumChildWindowsの使い方(VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
ゲームでは結局どっちが良いの?
-
ExcelのBOOKが消えた!
-
VBA .Value=.Value ?
-
[VBA] UserForm を Excel の W...
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
Excelの上下を固定したい
-
【VB2008】 マウス操作の一時的...
-
「&HFFFF」「&H1A」とは?
-
作成したウインドウのサイズを...
-
親ウインドウにあるOKボタンを...
-
他のアプリケーションの終了処理
-
MFC ダイアログ上のID取得につ...
-
ExcelVBAでAPIを使って外部ウイ...
-
EnumChildWindowsの使い方(VBA)
-
Alt+P,Alt+NをPostmessageで送...
-
Vba LongPtrについて教えてくだ...
おすすめ情報