既にフォームは表示されています。モーダルにできません。(エラー番号:400)


Private Sub CommandButton1_Click()
    Me.Show
End Sub

上のコードは、UserForm1に配置したボタン(CommnadButton1)のプロシージャです。すでに表示している自分自身(UserForm1)をShowしようとしたためにエラーが起こります。

UserFormの初期化(Initializeイベント)で時間のかかる処理を行うと、その処理が終わるまでUserFormは表示されません。ユーザーの、心理的な待ち時間を少なくするために、初期化(Initializeイベント)の途中で強制的にUserFormを表示させることがあります。そのときのShowメソッドはエラーになりません。なぜなら、初期化中のUserFormは、まだShowされていないからです。

Private Sub UserForm_Initialize()
    Me.Show
    ''時間のかかる処理
    ''    :
    ''    :
End Sub

もちろん、強制的に表示したUserFormを、初期化途中で操作されては困りますので、次のような工夫も必要です。

Private Sub UserForm_Initialize()
    Label1.Caption = "ただいま初期化中です..."
    CommandButton1.Enabled = False
    Me.Show
    ''時間のかかる処理
    ''    :
    ''    :
    Label1.Caption = ""
    CommandButton1.Enabled = True
End Sub