VBA Excel事件编译错误与命令按钮上的MouseMove事件

时间:2011-05-17 01:13:35

标签: events excel-vba compiler-errors vba excel

我正在尝试使用带有命令按钮的MouseMove事件,但无法弄清楚如何防止出现以下错误:

编译错误:      过程声明与具有相同名称的事件或过程的描述不匹配。

代码非常简单。我在这里使用了“虚拟”代码,因为我永远不能进入事件处理程序来获得有用的东西。

Private Sub Button_Name_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim X as Integer
  x = x+1
End Sub

我直接从对象浏览器中获取了参数列表。我得到与其他事件类似的结果,包括DblClick(),但不是Click()。我认为我必须犯一些基本错误,但无法识别它。救命!

2 个答案:

答案 0 :(得分:2)

我不太明白为什么你直接从对象浏览器中获取参数列表。如果您在VBA窗口中打开了用户表单的代码,则可以在代码上方的左下拉列表中选择命令按钮,并在右下拉列表中选择 MouseMove 事件。然后自动插入所需的代码。它与您的代码略有不同:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)

End Sub

您将遇到的下一个错误是 X 的重复声明。它已经是子程序的参数。所以你不能在子程序中重复使用它。

修复了这两件事后,即使在命令按钮上也会触发鼠标移动事件。

答案 1 :(得分:1)

发生错误是因为您更改了默认参数规范(删除了ByVal)。如果从VBA编辑器的右上角下拉菜单中选择MouseMove,则会自动显示正确的参数规范(在左上角的下拉列表中选择了命令按钮后)。不应更改参数规范,否则它将不起作用。 VBA期望这个特定的参数列表,如果发现不同的东西,它将无法编译。 (你唯一可以改变的是参数变量的名称 - 但没有别的。)

这有效:

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

    X = X + 1 ' or whatever you need to do with X and Y
    MsgBox "MouseMove! " & X & " " & Y

End Sub

我不得不承认,我发现在命令按钮上使用MouseMove事件是一件非常奇怪的事情 - 但也许你有理由吗?我肯定想听听他们的意见。

另外,正如@Codo指出的那样,你不应该在Sub中重新声明X。它已被声明为Sub的参数,您可以立即使用它(例如X = X + 1或其他)。您不必使用Dim重新声明它 - 事实上,这样做会产生编译时错误。