2017-11-11 26 views
0

私は以下のコードをExcel 2016 VBAから作成しました。オブジェクトはどのようにクライアントとの接続が切断されますか?

Private Sub useridno_AfterUpdate() 

    Dim strMsg As String 
    Dim ret_type As Integer 
    Dim strTitle As String 

    strTitle = "Wrong User ID Number!" 
    strMsg = " Would you like to try again?" 

    If Me.useridno.Value <> 1 Then 
     ret_type = MsgBox(strMsg, vbYesNo + vbCritical, strTitle) 

     Select Case ret_type 
      Case 6 
       Me.useridno.SetFocus 
       Me.useridno.Text = "" 
      Case 7 
       Unload Me 
     End Select 
    End If 

End Sub 

私はそれを実行すると、それは次のエラーを返します。

Disconnected to its clients!

私はメッセージボックスで「いいえ」のボタンを選択すると、この問題が発生しました。なぜこれはそうですか?

+0

データ型をバリアントに変更します。dim ret_typeを整数にします。ret_type As Variant – Sixthsense

+0

どのような制御が 'useridno'ですか? –

+0

@RobinMackenzie、それは私のuserformのテキストボックスです。 –

答えて

1

プロジェクトのどこかに、ユーザーフォームを表示するShowコマンドがあります。その瞬間から、userformは制御されています。 Showコマンドに続くコードは、ユーザーフォームが閉じられると再開します。 @Storaxが指摘しているとおり、そうするコマンドはMe.Hideです。

あなたのコードはUnload Meです。このエラーは、他のプロシージャがShowコマンドの後でユーザーフォームを参照しようとしたときに発生します。あなたのコードは、フォームからデータの一部を読み込もうとしたり、無害なSet UserForm = Nothingかもしれません。それはすでにアンロードされているため、これ以上参照することはできません。

正しい方法は、Showコマンドに続いて、使用する可能性のあるフォームからすべてのデータを取得した後に、呼び出し元のプロシージャでフォームをアンロードすることです。フォームのオブジェクト変数をメモリから明示的に解放したい場合は、そうすることができます。

+0

ありがとうございました。私は今それを得ました!:) Storaxにも感謝! –

関連する問題