- ベストアンサー
エクセルVBA ユーザーフォーム追加オプション表示
- エクセルVBAでユーザーフォーム追加オプションを表示する方法とは?
- エクセルのユーザーフォームで追加オプションを表示する方法を検索しても見つかりません。
- エクセルのユーザーフォームに〇の中に「>」マークのボタンを追加して、ユーザーフォームを伸縮させる方法を知りたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBEにて表示>プロパティウィンドウにてオブジェクトのプロパティ値を参照できます。 新規でフォーム挿入したUserForm1のサイズがHeight180、Width240で表記されているかと思います。 この値をボタンが押されるたびに変更してあげれば該当のことが可能になります。 (1)UserForm1にコマンドボタン(CommandButton1)を挿入し、 上記プロパティウィンドウにてcaptionを「> 展開」としてください。 (2)CommandButton1に以下のコードを追加してください。 Private Sub CommandButton1_Click() If Me.Width = 240 Then Me.Width = 340 Me.CommandButton1.Caption = "< 格納" Else Me.Width = 240 Me.CommandButton1.Caption = "> 展開" End If End Sub (3)ユーザーフォーム(UserForm1)を表示し、「> 展開」をクリックすると 幅が340になり、表示名が「> 展開」に切替わります。
その他の回答 (1)
- eden3616
- ベストアンサー率65% (267/405)
>これでオプションボタンを伸びたところに表示出来るように >(出来るのかな・・??)ちょっと挑戦してみます。 提示したコードでは実行されてお分かりかと思いますが、移動しません。 ボタンの位置もleftやtopプロパティを変更することで異動する必要があります。 また、フォーム作成の際は全ての項目を表示した場合で作成しておき、 フォームが読み込まれた際に格納する形で作成して下さい。 ①No1の画像を例にすると、幅340で全てのコントロールを配置・表示した状態で作成して下さい。 (ボタン配置はフォーム全体の右に寄せた状態で、表示名は「<格納」としておいてください。) ②フォームのコードを以下のように記述してください。 フォームが読み込まれた際に「フォーム開閉」プロシージャが実行されて、現在のフォーム幅を判定し展開→格納状態に切り替えた状態でフォームが表示されます。 以後、ボタンを押すたびに展開と格納を「フォーム開閉」プロシージャを呼び出すことで切替することが出来ます。 '▼フォーム読込時に実行 Private Sub UserForm_Initialize() Call フォーム開閉 End Sub '▼ボタンクリック時に実行 Private Sub CommandButton1_Click() Call フォーム開閉 End Sub '▼フォームの開閉切替コード Private Sub フォーム開閉() '現在のフォーム幅のサイズを条件判定 If Me.Width = 240 Then '/////展開時の処理///// Me.Width = 340 'ボタンの表示名を変更 Me.CommandButton1.Caption = "< 格納" '現在のボタン位置(left)を100加える(右方向に100移動する) Me.CommandButton1.Left = Me.CommandButton1.Left + 100 Else '/////格納時の処理///// Me.Width = 240 'ボタンの表示名を変更 Me.CommandButton1.Caption = "> 展開" '現在のボタン位置(left)を100減らす(左方向に100移動する) Me.CommandButton1.Left = Me.CommandButton1.Left - 100 End If End Sub 「追記」 ※「Me.CommandButton1.Left = Me.CommandButton1.Left ± 100」の箇所にて「>展開」「<格納」ボタンを移動(left = ±100)しています。 他の移動したいボタン等有れば適時追加してください。(OK、キャンセルボタン等) その他各オブジェクトのプロパティ値を変動させる事で同的にフォーム内のパーツを移動させることが出来るようになります。 【参考:UserFormsオブジェクトについて詳しく知ろう!】 http://home.att.ne.jp/zeta/gen/excel/c04p28.htm 余談ですが、WindowsAPIを利用することでフォームのリサイズも可能になります。 (フォーム内のコントロールは移動・可変などの追従処理を行う必要があります) 【参考:「Excel] [VBA] ユーザーフォームをリサイズ可能にする】 http://propg.ee-mall.info/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/vba/%E3%80%8Cexcel-vba-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E3%83%AA%E3%82%B5%E3%82%A4%E3%82%BA%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%99%E3%82%8B/
お礼
eden3616さん ご想像の通りオブジェクトの表示について四苦八苦してました。 伸びたところにどうやってオブジェクトを自動追加するかばかり 考えてしまっていましたので 最初に全部作っておいてからの格納、その手があったのかと 感動です。 VBAの知識も去ることながら自分のコチコチアタマを まずは柔らかくしないと・・ですね。 ご丁寧に説明していただき感謝いたします。
お礼
おおぉ!伸び縮みしました!! 私のやりたかった事は投稿後もひたすら調べたところ アクセスのフォームフッターなるものと同じらしい事が分かりましたが やはりエクセルでのフォームフッターは検索出来ず どうしたものか、と悩んでいました。 格納の形をUserform1で作って展開後をUserform2で作って・・・ これしかないかな、と諦めかけていましたが なるほど、伸びました! これでオプションボタンを伸びたところに表示出来るように (出来るのかな・・??)ちょっと挑戦してみます。 写真までつけていただきありがとうございましたm(_ _)m とても分かりやすかったです。