オプションボタンを切り替えた時に、メッセージを出し、「いいえ」を選択したらValueを元の位置に戻したいのですが
クリックイベントが起こるため、「はい」を押すまでプロシージャを抜けることができなくなります。
Exit Subを使ってもうまく行かないため、どうしていいのか分からなくなりました(TT
なにかよい回避方法をご存知でしたら教えてください。よろしくお願いします。
サンプルコードは下記のような感じです。
Private Sub optTest_Click(Index As Integer)
Dim intA As Integer
intA = MsgBox("ほんとに変更する?", vbYesNo, "ほんとに?")
If intA = vbNo Then
If optTest(0).Value = True Then
optTest(1).Value = True
ElseIf optTest(1).Value = True Then
optTest(0).Value = True
End If
End If
End Sub
とりあえずもっとも安直な方法・・・
Private m_bPassive As Boolean
Private Sub optTest_Click(Index As Integer)
Dim intA As Integer
If m_bPassive Then
m_bPassive = False
Exit Sub
End If
intA = MsgBox("ほんとに変更する?", vbYesNo, "ほんとに?")
If intA = vbNo Then
m_bPassive = True
If optTest(0).Value = True Then
optTest(1).Value = True
ElseIf optTest(1).Value = True Then
optTest(0).Value = True
End If
End If
End Sub
Design 時にどっか一個の OptionButton を on しておくか、code 内で set
する場合はその前に m_bPassive = True してから set すること。
うっわぁ〜ださださぁ・・・
なんかもっと smart な方法はないのかよ・・・
MsgBox で無ければならないのでしょうか?
非表示にしてある Command ボタン「ほんとに変更する」と
「取りやめる」をオプションボタンを切り替えた時に表示して
どちらかの Command ボタンを押したらオプションボタンの変更を
してから、再度 Command ボタンを非表示にする...はどう?
こういうのはflgで蹴っ飛ばす。
Private Sub optTest_Click(Index As Integer)
Static flg
If flg = True Then Exit Sub
flg = True
Dim intA As Integer
intA = MsgBox("ほんとに変更する?", vbYesNo, "ほんとに?")
If intA = vbNo Then
If optTest(0).Value = True Then
optTest(1).Value = True
ElseIf optTest(1).Value = True Then
optTest(0).Value = True
End If
End If
flg = False
End Sub
なるほど、フラグを使えばいいのですね。
解決しました。ありがとうございました〜