4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ExcelVBAユーザーフォームに標準モジュールから値を渡し、結果を受け取る(グローバル変数なし)

Posted at

#概要
 「ブックのオープンイベントやボタンのクリックイベントでユーザーフォームを開いて処理を開始して,標準モジュールを呼ぶ」
 それが基本的な処理であることは間違いありません。しかし,どうしても処理の途中でユーザーに選択してもらわないと後処理の都合上うまくいかないときがあります。
 標準モジュールからユーザーフォームの部品の値の設定をするのは簡単ですが,ユーザーの選択結果を標準モジュールで受け取るところでつまづいたのでまとめます。
#ユーザーフォームの値を設定する
 これは簡単で,標準モジュール内で
・ユーザーフォーム名.コントロール名.プロパティ
・ユーザーフォーム名.コントロール名.メソッド
とすれば,普通にユーザーフォームの各部品にアクセスできます。

ユーザーフォームに値を設定
Sub input_userform1()
    UserForm1.Label1.Caption = "標準モジュールから値を設定しました"
    UserForm1.ComboBox1.Text = "任意の作家名"
        Dim i As Integer
        i = 1
        Do While Cells(i, 1) <> ""
            UserForm1.ComboBox1.AddItem Cells(i, 1)
            i = i + 1
        Loop
    UserForm1.Show
    Unload UserForm1
End Sub
2020-08-12.png 値が設定されています。

#ユーザーフォームの結果を受け取る
 まず,ユーザーフォームをどうやって閉じるか,という問題があります。
 今回の場合,「OK」ボタンで閉じることとします。
 まずはやりがちなうまくいかない例から。

うまくいかない例:ユーザーフォーム
Private Sub CommandButton1_Click()
    Unload UserForm1
End Sub
うまくいかない例:標準モジュール
    UserForm1.Show
    Dim result As String
    result = UserForm1.ComboBox1.Text
    MsgBox result
2020-08-12 (1).png ユーザーフォームで選択しても,結果が取得できません。

 うまく動きません。それもそのはず,値を取得する前,ユーザーフォームを閉じた段階でUnloadしているのですから,部品の値も取得できなくなってしまうのです。
 かといって,ユーザーフォームが開かれている間は次の処理にいかないので,ユーザーフォームを開いている間に値を変数に入れたりはできません。

 ではどうするかというと,ユーザーフォームをいったん隠してしまえばよいのです。

ユーザーフォーム
Private Sub CommandButton1_Click()
    UserForm1.Hide
End Sub

 ユーザーフォーム側では,Unloadではなくhideを使ってユーザーフォームを隠し,次の処理に進みます。

標準モジュール
    UserForm1.Show
    Dim result As String
    result = UserForm1.ComboBox1.Text
    Unload UserForm1
    MsgBox result

 標準モジュール側で必要な値を変数に入れるなどしてから,ユーザーフォームをUnloadします。
2020-08-12 (2).png
 結果を標準モジュールのメッセージボックスで受け取ることができました。

 標準モジュールの処理の最中にユーザーフォームを呼べるようになると,ユーザーフォームの活用の幅が更に広がりますよね。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?