ーザフォーム上のテキストボックスをマウスでクリックしたとき、さまざまな「イベント」が発生します。
イベントプロシージャの中に、「処理」を記述すれば、ユーザの操作に応じて「仕事」を定義することができます。
ただし、マウスの右ボタンのときは注意が必要です。
テスト用にイベントの発生状況をチェックするプログラムを作ってみました。
フォームにテキストボックスとイベント表示用のリストボックスを配置しています、
テキストボックスのイベントプロシージャは以下の通り、イベント名を表示するだけです。
Private Sub TextBox1_AfterUpdate()
ListBox1.AddItem "AfterUpdate"
End Sub
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
ListBox1.AddItem "BeforeUpdate"
End Sub
Private Sub TextBox1_Change()
ListBox1.AddItem "Change"
End Sub
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ListBox1.AddItem "DblClick"
End Sub
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ListBox1.AddItem "MouseDown" & "-" & chkLeftRight(Button)
End Sub
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ListBox1.AddItem "MouseUp" & "-" & chkLeftRight(Button)
End Sub
Private Function chkLeftRight(tmp As Integer) As Variant
chkLeftRight = IIf(tmp = 1, "left", _
IIf(tmp = 2, "right", ""))
End Function
MouseDownとMouseUpイベントでは、左右どちらのボタンが押されたかを
チェックするようにしています。
図はテキストボックスを
左ボタンでクリックし、
キーボードから
1
2
3
Enter
と入力した場合のイベントの発生状況です。
想像通りで問題ないですね。
ところが、右ボタンでクリックすると図のようになりま す、
MouseDownが2回発生していることがわかります。
以前のバージョンのExcelでも同じようです。
マイクロソフト社は気づいていないとは考えられないので、何らかの理由があって修正できないのかと思いますが、
なんとかしてほしいところです、
幸いなことにMouseUpは一回だけなのでこちらを使うのがいいでしょうね。Downイベントのほうで2回目の時は何もしないでプロシージャを抜けるようにする方法もありますが。