我正在尝试使用带有命令按钮的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()。我认为我必须犯一些基本错误,但无法识别它。救命!
答案 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
重新声明它 - 事实上,这样做会产生编译时错误。