初めて書きこみさせていただきます。大変困っています教えていただけないでしょうか?
あるコマンドボタンを押されたら、まずそのコマンドボタンを非表示(Visible=Faules)にして、さらに無効(Enable=Faules)にし、ある処理を行ってその後それぞれをTrueにしています。
そこで、その処理中にコマンドボタンがあったところをクリックするとその処理が終わったら、又その処理をクリックされた数だけ繰り返します。
そのコマンドボタンが無効の状態で発生したイベント割り込みをクリアするにはどうしたらいいのでしょうか?
それとも、考え方がおかしいだけなのでしょうか?
おそらく、フラグで制御するのが一番簡単ですね。
Option Explicit
Private blnFlg As Boolean
Private Sub Command1_Click()
If blnFlg = True Then
Exit Sub
End If
With Command1
.Visible = False
.Enabled = False
End With
'処理・・・・・・・・・・・・
With Command1
.Visible = True
.Enabled = True
End With
blnFlg = False
End Sub
みたいな!
とろさん、助言ありがとうございます。
書き込みは初めてだったのでこのようにアドバイスをいただけると何かとてもうれしいです。
しかし、この方法は一度試みてはいるのですがコマンドボタンのプロシージャを抜けるころにはフラグがFalse(僕がスペルミスしていたみたい・・恥ずかしい)になっているので、End Subで抜けるともう一度走り出しちゃったのですが・・・・
何か基本的な見逃しでもしているのでしょうか?
コマンドボタンのClickイベント中に押された
マウスイベントを無効にするには、コマンド
ボタンを無効(Enableプロパティ = False)状態
にしてイベントを受取ってあげれば良いです。
無効状態の時にマウスクリックしても、イベントは
発生しませんよね。
具体的には次のようになります。
ただ、DoEventsはその他の弊害も考えないといけないので
多用しない方が良いと思いますが...。
Private Sub Command1_Click()
Dim I As Long
Static iCount As Integer
Command1.Enabled = False ' ここで無効にして
Command1.Visible = False
DoEvents ' ボタンを見えなくするために入れた
' なんかの忙しい処理のかわり
For I = 1 To 10000000
Next I
' クリックイベントを受けとてないことを確認するため
' クリックイベント発生ごとに数字をカウントして表示
iCount = iCount + 1
Label1.Caption = CStr(iCount)
DoEvents ' 上の長い処理中に発生した
' イベントを吐き出す
Command1.Enabled = True ' ボタンを有効にする
Command1.Visible = True
End Sub
解決しました。
うちさん、どうもありがとうございます。