Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
ユーザーフォームをunloadするとエラーになる
投稿日時: 20/10/19 12:28:59
投稿者: ip8bk

下記のinitializeの中にあるifがtrueになったときにエラーが発生します。
原因がわからなくて困っているため、質問させていただきます。
ご存知の方いらっしゃいましたら、教えてください。
 
動作としては、a=1の時だけユーアーフォームを閉じてほしいです。
よろしくお願いいたします。
 
実行時エラー'91':オブジェクト変数またはwithブロック変数が設定されていません。
 
デバックをクリックすると、UserForm1.Show vbModelessが黄色くハイライトされます。
 

Private Sub UserForm_initialize()
    a = ActiveCell.Row
    If a = 1 Then
        'MsgBox ("その行は選択できません")
        Unload UserForm1
        Exit Sub
    Else
        TextBox1 = Cells(a, 1).Value
    End If
End Sub


Sub フォームのモードレス表示()

UserForm1.Show vbModeless

End Sub

回答
投稿日時: 20/10/19 13:25:34
投稿者: Suzu

Sub フォームのモードレス表示()
 
UserForm1.Show vbModeless
 
End Sub
 
にて、フォームを開こうとすると
 
フォームを開く準備として、
Private Sub UserForm_Initialize()
が発生します。
 
この段階では、フォームは開いていません。
 
開いた後に、
Sub フォームのモードレス表示()
に制御が戻るのですが、
 
その段階で、強制的にフォームを閉じているので、
操作したはずのフォームが見つからずにエラーになっています。
 
Initializeにて閉じる のではなく、
 
Sub フォームのモードレス表示()
    If ActiveCell.Row = 1 Then
        MsgBox ("その行は選択できません")
    Else
        UserForm1.Show vbModeless
   End If
End Sub
 
の様に、その前の段階で、条件分岐を行い条件に合致した場合にフォームを開くようにします。

投稿日時: 20/10/19 13:56:56
投稿者: ip8bk

大変勉強になりました。
ありがとうございました。