web-dev-qa-db-ja.com

ユーザーフォームクローズイベント

条件が存在する間、ループで開いたり閉じたりするユーザーフォームがあります。ユーザーは、アクションを実行するいくつかのボタンをクリックできます。問題は、ユーザーの予測不可能性です。これらの問題の1つは、ユーザーがボタンの1つをクリックする代わりに、ユーザーフォームの上部にある[ウィンドウを閉じる]ボタンをクリックすると、アクションを実行せずにループが進行することです。

---編集---
フォーム自体のキャンセルボタンと同じアクションを実行させるためにコードを実行できる、そのボタンを使用したイベントはありますか。それ自体を非表示にしたり無効にしたりする必要はありません。

4

たとえば、以下のマクロをUserFormsコードモジュールに追加できます。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "You can't close the dialog like this!"
    End If
End Sub
11
Sam Gilbert

MsgBoxの代わりに、ボタンにフォーカスするだけです。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        Me.Close_Button.SetFocus
    End If
End Sub

編集済み:より良いオプションを発見しました:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    ' YOUR CODE HERE (Just copy whatever the close button does)

    If CloseMode = vbFormControlMenu Then
        Cancel = False
    End If

End Sub
3
André Oliveira