vba 监听shape鼠标悬浮事件时Dim WithEvents myShape As Shape 报错对象不是源自动事件
时间: 2024-02-19 18:02:51 浏览: 155
鼠标悬浮监听
如果你在使用 `WithEvents` 关键字时出现了 “对象不是源自动事件” 的错误,那么可能是因为你声明的对象并非来自于自动事件的源。在这种情况下,你需要将对象转换为 `OLEObject` 类型并使用 `WithEvents` 来监听鼠标事件。
下面是一个修改后的代码示例,它监听 `Sheet1` 上名为 `myShape` 的形状的鼠标悬浮事件:
```vb
Dim WithEvents myShape As OLEObject
Private Sub Worksheet_Activate()
Set myShape = Me.OLEObjects("myShape")
End Sub
Private Sub myShape_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
MsgBox "Mouse moved over the shape!"
End Sub
```
在这个示例中,我们首先将 `myShape` 对象声明为 `OLEObject` 类型并使用 `WithEvents` 关键字。然后,在 `Worksheet_Activate` 事件中,我们将 `myShape` 指定为 `Sheet1` 上名为 `myShape` 的形状。
最后,在 `myShape_MouseMove` 事件处理程序中,我们处理鼠标悬浮事件。当鼠标移动到 `myShape` 上时,VBA 会触发该事件处理程序并显示一个消息框。
注意,这里的事件名称是 `myShape_MouseMove` 而不是 `myShape_MouseHover`。这是因为在 VBA 中,没有单独的鼠标悬浮事件,而是使用 `MouseMove` 事件来处理鼠标悬浮。
阅读全文