【VBA】フォームの値を呼び出し元によって異なる初期値を設定する方法

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。

SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。

お気軽にお問い合わせください。

業務効率化を目指してVBAで作成するときに、フォームは、使える武器ですね!そんな、フォームを一段階、レベルアップした使い方をご紹介しますね!

この記事のまとめ

VBAを使ったフォームの呼び出し元によって、内容を変更する方法が分かります!

せっかく作ったフォームなんだけど、呼び出された状況によって、表示内容を変えたいけど、出来ないなぁ

稲垣

VBAでフォームに初期値を動的に設定する方法は、複数あるので紹介するね!

本記事の内容を使って、VBAで業務効率化をぜひ実践してくださいね!

目次

フォームに異なる初期値を設定する方法

はい、それでは、早速やっていきましょう!

呼びだれるフォームを作成

稲垣

フォームを作成して、表示内容を変更したいテキストボックスを配置してください。

フォームにテキストボックスを配置したよ!
名前は、『TextBox1』という、初期設定のままにしてあるよ

固定の初期値を設定する方法

稲垣

まずは、動的ではなく、固定で初期値を設定する方法をやってみよう!

Valueプロパティに設定

プロパティって、左下に表示されているウインドウだよね?

稲垣

そう!その通り!
Valueプロパティで初期値を設定することができるんだ。

設定したら、VBEでも表示されたよ!

稲垣

実行してみよう!

初期値が設定できた!

ユーザーフォームの、Valueプロパティに設定することで、初期表示時に値を設定することができます

フォームがインスタンス化される時に設定する方法

稲垣

次は、フォームがインスタンス化され表示される時に設定する方法だよ

インスタンス化って、設計図から実態を作り出すことだよね?

稲垣

その通り!インスタンス化するときに、初期化メソッドがVBAには用意されているんだ!それを利用してみよう!

Private Sub UserForm_Initialize()

End Sub
稲垣

これが、初期化メソッドです!
では、先ほどのテキストボックスに、値を設定するコードを追加してみましょう!

Private Sub UserForm_Initialize()
    Me.TextBox1 = "初期化メソッド"
End Sub

さっき、Valueプロパティに設定した値は修正しなくて大丈夫?
とりあえず実行してみよう

稲垣

初期値は確かに設定してあるけど、インスタンス化される時にプログラムが実行されて、テキストボックスに『初期化メソッド』と表示されたんだ

初期化メソッドは、プロパティの設定より後に実行される

稲垣

VBAの初期化メソッドには、他の言語ではできるのにできないことがあるんだ

できないことって何だろう?

稲垣

それは、初期化メソッドにパラメーターを渡すことができないんだ!
つまり、下のようなコードは書けないだ

表示するときに動的に値を設定する方法

稲垣

次は、動的に変える方法を紹介しますね!

セルの値を表示する

セルの値を初期値にしたいです!
イメージしやすい処理だから

稲垣

先ほどの初期化メソッドを使って実現してみよう!

Private Sub UserForm_Initialize()
    Me.TextBox1 = Worksheets("Sheet1").Range("A1")
End Sub

実行結果

これができるだけで、助かります!

Showメソッド実行前に設定する

稲垣

わたしが呼び出し元によって、初期値を変更する方法を紹介するね!

どんな方法ですか?

稲垣

Showメソッド使う前に、フォームをインスタンス化して値を設定しておく方法だよ

Public Sub test()
    'インスタンス化
    Dim ufm As UserForm1
    Set ufm = New UserForm1

    '初期値を設定
    UserForm1.TextBox1 = "プログラムで設定"
    UserForm1.Show

End Sub

Showメソッドを使う前に、インスタンス化できるなんて知らなかった💦

稲垣

この方法は、呼び出し元(標準モジュールなど)で処理を書くから初期値を動的に設定することが簡単なんだ

フォームは、インスタンス化してShowメソッド前に処理を動かすことができる!

別プログラムから呼び出してみる

Public Sub test()
    'インスタンス化
    Dim ufm As UserForm1
    Set ufm = New UserForm1

    '初期値を設定
    UserForm1.TextBox1 = "プログラムで設定"
    UserForm1.Show

End Sub

Public Sub test2()
    'インスタンス化
    Dim ufm As UserForm1
    Set ufm = New UserForm1

    '初期値を設定
    UserForm1.TextBox1 = "実験だよ"
    UserForm1.Show

End Sub

これでtest2とtest1とで処理がわけれるのね!
test2を実行してみよっと

稲垣

素晴らしいね!
これで、ユーザーフォームの初期値について理解できたね!

まとめ

VBAでボタンによって異なる初期値を設定する方法を解説しました。これにより、ユーザーは求める情報にすぐにアクセスできるようになります。業務効率化を目指す方々にとって、非常に役立つテクニックです。もし、さらに専門的なサポートが必要な場合は、ぜひご依頼ください。

記事を書いた人

稲垣

  • Excel、ACCESSでのシステム開発が得意
  • ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
  • 自家焙煎するほどのコーヒー好き
  • 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
  • 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次