条件が存在する間、ループで開いたり閉じたりするユーザーフォームがあります。ユーザーは、アクションを実行するいくつかのボタンをクリックできます。問題は、ユーザーの予測不可能性です。これらの問題の1つは、ユーザーがボタンの1つをクリックする代わりに、ユーザーフォームの上部にある[ウィンドウを閉じる]ボタンをクリックすると、アクションを実行せずにループが進行することです。
---編集---
フォーム自体のキャンセルボタンと同じアクションを実行させるためにコードを実行できる、そのボタンを使用したイベントはありますか。それ自体を非表示にしたり無効にしたりする必要はありません。
たとえば、以下のマクロを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
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