機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

Shift+クリックやCtrl+クリックを判別する



コマンドボタンが、Shiftキーを押しながらクリックされたかどうかの判別は、標準の「CommandButton_Click」ではできません。左ボタンと右ボタンを判別したように、MouseDownイベントかMouseUpイベントを使います。ここでは、MouseUpイベントでやりましょう。

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
                                                            ByVal X As Single, ByVal Y As Single)
End Sub

コマンドボタンがクリックされたとき、Sfhitキー・Ctrlキー・Altキーのいずれかが押されていたかどうかは、引数Shiftに数値が格納されます。

内容
 1   Shiftキーが押されました 
 2   Ctrlキーが押されました 
 3   Shiftキーと同時にCtrlキーが押されました 
 4   Altキーが押されました 
 5   Altキーと同時にShiftキーが押されました 
 6   Altキーと同時にCtrlキーが押されました 
 7   Altキー、Shiftキー、Ctrlキーの3つが同時に押されました 

なので、これを区別すれば、どのキーが押されていたかを判別できます。

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
                                                            ByVal X As Single, ByVal Y As Single)
    If Shift = 7 Then
        MsgBox "隠し機能"
    Else
        MsgBox "通常機能"
    End If
End Sub



Shift+Ctrl+Altを押しながら右クリックされたときだけ、管理者用の機能を実行するなどに便利です。
隠し機能的な話をしたので、ついでにもう少し。利用者には使って欲しくないけど、管理者がデバッグなどの目的で実行したいような機能は、上のように特別な方法で起動させるといいです。Shift+Ctrl+Alt+右クリックあたりは、まず普通のユーザーが普通に使うときは、誤って操作することもないでしょう。しかし、ものすごく好奇心の旺盛なユーザーだったり、信じられない"ウッカリ者"のユーザーだったら、つい間違えて実行してしまうかもしれません。そんなときは、次のようにする手もあります。

次のコードは、コマンドボタンを普通に左クリックしたときには"通常機能"と表示しますが、Shift+Ctrl+Altを押しながら、右ボタンで5回続けてクリックしたときだけ、パスワードの入力画面を表示します。

Private Sub CommandButton1_Click()
    MsgBox "通常機能"
End Sub

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
                                                            ByVal X As Single, ByVal Y As Single)
    Static cnt As Long
    If Shift = 7 And Button = 2 Then cnt = cnt + 1
    If cnt = 5 Then
        If InputBox("Password?") = "1234" Then
            MsgBox "管理者機能"
        End If
    End If
End Sub





Staticステートメントによる静的変数は、プロシージャが終了してもクリアされません。








このエントリーをはてなブックマークに追加