【问题标题】:VBA Excel Event Compile Error with MouseMove event on a command buttonVBA Excel 事件编译错误与命令按钮上的 MouseMove 事件
【发布时间】:2011-05-18 03:04:30
【问题描述】:

我正在尝试将 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()。我认为我一定犯了一些基本错误,但无法识别它。帮助!

【问题讨论】:

  • 我认为您误解了事件驱动的编程方面。当您移动鼠标时会触发 MouseMove 事件。它永远不会被调用或分配给按钮。如果您需要在按下按钮时发生某些事情,请将其放在按钮的单击处理程序中。

标签: events excel compiler-errors vba


【解决方案1】:

我不太明白您为什么直接从对象浏览器中获取参数列表。如果您在 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 的重复声明。它已经是子程序的一个参数。所以你不能在子例程中重用它。

解决了这两个问题,鼠标移动事件将触发,即使是在命令按钮上。

【讨论】:

  • 谢谢。你的回答很到位。我从 VBA 语言参考link 中获取了我的原始参数列表,其中省略了 ByVal。 X 只是虚拟代码,不在“真实”列表中。
【解决方案2】:

发生错误是因为您更改了默认参数规范(您删除了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 重新声明它——事实上,这样做会产生编译时错误。

【讨论】:

  • 谢谢。如上所述,添加 ByVal 解决了该问题。我最初使用 MouseMove 的想法是在鼠标悬停相关命令按钮时显示一个文本框。
猜你喜欢
  • 2015-09-10
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2022-12-11
相关资源
最近更新 更多