このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】ユーザーフォームを標準モジュールから呼び出す方法(Show)

2024年1月26日

今回はユーザーフォームを標準モジュールから呼び出す方法を紹介します。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

ユーザーフォームを標準モジュールから呼び出す方法

ユーザーフォーム名
'標準モジュール側
Sub ShowUserForm()
    'ユーザーフォーム名.Show
    UserForm1.Show
End Sub

ユーザーフォームを標準モジュールから呼び出すにはShowメソッドを使います。

ユーザーフォーム名が「UserForm1」ならばUserForm1.Showとすれば表示されます。

ユーザーフォーム名に応じて **.Showとしましょう。

シート上のボタンからユーザーフォームを表示させる

シート上のボタンからユーザーフォームを表示させるためには、標準モジュールに作成したプロシージャを利用すればOKです。

シート上に標準モジュールのプロシージャ(先ほどのサンプルコードだとShowUserForm)を呼び出すボタンを設置します。

これで、ボタンを押せばShowUserFormが実行されて、ShowUserFormがユーザーフォームが表示されます。

ユーザーフォームに引数を渡す方法

他の言語だと、ユーザーフォームなどを作成するときに同時に引数を渡すことができます。

しかし、VBAにはこのような仕様がありません。

そのため、引数の代わりにモジュールレベル変数を使って対処します。

'ユーザーフォーム側
Public abc as String'モジュールレベル変数

まず、↑のようにユーザーフォーム側にモジュールレベル変数を定義します。

モジュールレベル変数が分からない方ははVBAでグローバル変数を定義する方法(モジュールレベル変数)をご覧ください。

'標準モジュール側
Sub ShowUserForm()
    
    '一旦、ユーザーフォームのインスタンス変数を作成する
    Dim uf As UserForm1
    Set uf = New UserForm1
    
    'モジュールレベル変数に値を代入
    uf.abc = "渡したい値"
    
    'インスタンス変数.Show
    uf.Show
End Sub

標準モジュール側には↑のように記載します。

先ほどは「ユーザーフォーム名.Show」でいきなりユーザーフォームを表示したのですが、今回は一旦ユーザーフォームのインスタンス変数を作成しています。

そして、インスタンス変数.変数名=~として、モジュールレベル変数に値を代入します。

こうすることにより、標準モジュールの値をユーザーフォームにて利用することができます。

ユーザーフォームの表示中に他の操作を許可する方法

'標準モジュール側
Sub ShowUserForm()
    '他の操作を許可
    UserForm1.Show vbModeless
End Sub

ユーザーフォームの表示中に他の操作を許可するには、Showメソッドの後にvbModelessを書きます。

これを書くとユーザーフォームの表示中に、セルを選択したりすることができます。

ユーザーフォームを開きながら他の処理もする場合は、vbModelessを追加しましょう。

VBAが難しいと感じたら
ココナラでVBAの開発請負を行っています。
お気軽にご相談ください。

VBA

Posted by やろまい