vba Excel 2010 - Active X 控件命令按钮上的 MouseDown 事件

vba Excel 2010 - MouseDown event on Active X Controls Command Button

this page 上,Microsoft 解释了如何知道在发生 MouseDown 事件时是否按下了 Shift、Ctrl 和 Alt 的组合:

Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ShiftTest = Shift And 7 Select Case ShiftTest Case 1 ' or vbShiftMask Print "You pressed the SHIFT key." Case 2 ' or vbCtrlMask Print "You pressed the CTRL key." Case 4 ' or vbAltMask Print "You pressed the ALT key." Case 3 Print "You pressed both SHIFT and CTRL." Case 5 Print "You pressed both SHIFT and ALT." Case 6 Print "You pressed both CTRL and ALT." Case 7 Print "You pressed SHIFT, CTRL, and ALT." End Select End Sub

它工作得很好。我有很多命令按钮,是否可以不复制粘贴所有这些行并用调用的函数替换它们?

这是想法,但行不通:

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) call test(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub

Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) call test(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub

CommandButton3 和 4 相同...

Private Sub test(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ShiftTest = Shift And 7 Select Case ShiftTest Case 1 ' or vbShiftMask Print "You pressed the SHIFT key." Case 2 ' or vbCtrlMask Print "You pressed the CTRL key." Case 4 ' or vbAltMask Print "You pressed the ALT key." Case 3 Print "You pressed both SHIFT and CTRL." Case 5 Print "You pressed both SHIFT and ALT." Case 6 Print "You pressed both CTRL and ALT." Case 7 Print "You pressed SHIFT, CTRL, and ALT." End Select End Sub

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    test CommandButton1, Shift, X, Y
End Sub

Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    test CommandButton2, Shift, X, Y
End Sub