こんにちは、Ryoです。
VBAでユーザーフォームを使用することは多いですが、その際に設けるコマンドボタンなどの補足情報を予め設定しておき、「Help」のようなイメージで表示させたい場合もあるのではないでしょうか。その場合は一例としてTagプロパティを使用することで対応出来ますので、今回はその方法について書いていきます。
1.サンプル概要
今回のサンプルは、ユーザーフォーム上にあるテキストボックスに文字を入力し、「幅調整」ボタンを押すと文字に合わせてテキストボックスが自動調整されるもので、隣にある「リセット」ボタンはテキストボックスサイズを初期状態に戻します。
また、各ボタンの右上にある「?」ボタンはHELPをイメージして配置したもので、押すと対応したボタンの補足情報が表示されます。
動作としては、シート上に配置したボタンからユーザーフォームを呼び出し、テキストボックスに文字を入力します。
入力後に「幅調整」ボタンを押すと、この通りテキストボックスサイズが自動調整されます。
その「幅調整」や「リセット」ボタン右上の「?」ボタンはメッセージボックスで補足情報を表示するものです。
「リセット」ボタンは自動調整されたテキストボックスを初期状態に戻します。
この概要に沿って以下に内容を書いていきます。
2.UserForm構成
構成は以下の通りUserForm1上にTextBox1/CommandButton1/CommandButton2/CommandButton3/CommandButton4を配置しています。
TextBox1の文字サイズやフォントは任意で問題ありませんが、サンプルでは「メイリオ」、スタイル「ボールド」、サイズ「16」です。
3.サンプルコード
UserFormに関するサンプルコードは以下が全てになります。
Private Sub CommandButton1_Click() 'TextBox1の幅を自動調整 Me.TextBox1.AutoSize = True End Sub Private Sub CommandButton2_Click() With Me.TextBox1 '幅の自動調整解除 .AutoSize = False 'TextBox1サイズを初期値に戻す .Width = 192 .Height = 52.5 End With End Sub Private Sub CommandButton3_Click() 'メッセージボックスに設定したTag内容を表示 MsgBox "「幅調整」ボタン:" & CommandButton1.Tag End Sub Private Sub CommandButton4_Click() 'メッセージボックスに設定したTag内容を表示 MsgBox "「リセット」ボタン:" & CommandButton2.Tag End Sub Private Sub UserForm_Initialize() 'コマンドボタン3のTagプロパティに説明文を設定 CommandButton1.Tag = "文字入力されたテキストボックスの" _ & vbCrLf & "サイズを自動調整します" 'コマンドボタン4のTagプロパティに説明文を設定 CommandButton2.Tag = "テキストボックスサイズを初期値に戻します" End Sub
では、個別に解説していきます。
◆UserForm_Initialize()
Private Sub UserForm_Initialize() 'コマンドボタン3のTagプロパティに説明文を設定 ConmmandButton1.Tag = "文字入力されたテキストボックスの" _ & vbCrLf & "サイズを自動調整します" 'コマンドボタン4のTagプロパティに説明文を設定 CommandButton2.Tag = "テキストボックスサイズを初期値に戻します" End Sub
このユーザーフォーム初期化処理でTagプロパティを使用し、補足情報などを設定します。
オブジェクト.Tag = expression
構文に従って各コマンドボタンのTag設定を次の通り記述しています。
CommandButton1.Tag = “文字入力されたテキストボックスの” _
& vbCrLf & “サイズを自動調整します”
CommandButton2.Tag = “テキストボックスサイズを初期値に戻します”
これでCommandButton1,2のTag情報が設定されましたが、このTag情報は手軽にユーザーフォーム上のコントロール情報として共有できるということが利点です。
◆CommandButton1_Click()
Private Sub CommandButton1_Click() 'TextBox1の幅を自動調整 Me.TextBox1.AutoSize = True End Sub
ここではTextBox1に対してAutoSize設定するだけなので、記述としては1行の Me.TextBox1.AutoSize = Trueとなります。
True指定することでコントロール(本例ではTextBox1)が自動調整されますが、False指定しないと自動調整状態が維持されるという点をご注意ください。
◆CommandButton2_Click()
Private Sub CommandButton2_Click() With Me.TextBox1 '幅の自動調整解除 .AutoSize = False 'TextBox1サイズを初期値に戻す .Width = 192 .Height = 52.5 End With End Sub
この処理でAutoSizeプロパティに対しFalse指定しますので、自動調整は解除されます。但し、解除されてもTextBox1サイズが初期値に戻る訳ではありませんので、.Width/.Heightを指定して元に戻しています。
この初期値はUserFormを作成する際に、配置したTextBox1のプロパティを確認しておけば良いと思います。
◆CommandButton3,4_Click()
Private Sub CommandButton3_Click() 'メッセージボックスに設定したTag内容を表示 MsgBox "「幅調整」ボタン:" & CommandButton1.Tag End Sub Private Sub CommandButton4_Click() 'メッセージボックスに設定したTag内容を表示 MsgBox "「リセット」ボタン:" & CommandButton2.Tag End Sub
CommandButton3又は4のボタンについては、押された際にそれぞれ対応するTagプロパティに設定された情報をメッセージボックスで表示しています。
今回のサンプルでは補足情報としてなので、メッセージボックスで”「幅調整」ボタン:” & CommandButton1.Tagと記述し表示した際に各ボタンの役割を伝えることでHELPのようなイメージにしましたが、この通りTagプロパティの設定情報は共有できるので、用途によっていろいろな形で活用出来そうですね。
◆フォーム呼び出し
これは「標準モジュール」に記述する内容ですが、UserForm1を呼び出すものです。
Sub Sample1() 'UserForm1を表示する UserForm1.Show End Sub
記述自体は至って簡単ですが、稀に「実行時エラー424 オブジェクトが必要です」というエラーが発生します。私の場合はこれまでの経験上、原因はいつもUserForm_Initialize()内の記述に誤記があるというものでした(笑)もし同様のエラーにみまわれたら一度チェックしてみるのも良いかもしれませんね。
4.まとめ
今回は知っておくと何かと役に立ちそうなTagプロパティについて書いてみました。ふと思いついたのが今回のサンプルのような使い方ですが、他にはボタンクリック判定などにも使えそうですね。
プロパティありきで何か作ろうと思うと良い発想が浮かばないものですが、VBAでの作成過程で知っていると幅が広がりますから、何か機会があればご検討くださいませ。
以上、コマンドボタンなどの補足情報を表示する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo