有人能确认在VBA中是否存在从Excel 2010的插入菜单中绘制的文本框发生更改的事件吗?我尝试了RelevantTextBoxName_Change(),但即使文本框的内容已更改,也不会调用sub。
这是一个“形状”文本框。
谢谢。
发布于 2019-07-15 17:02:25
我建议您使用this implementation
上面的库使用了@lbo建议的VBA实现。它本质上是一种从现有事件创建“假事件”的方式,这些事件已经捕获了你想要的功能。在这种情况下,我们使用CommandBars_OnUpdate事件(每当形状被更改/删除/选择/取消选择/创建时,该事件似乎都会触发。然后,我们对excel工作簿的当前状态进行筛选,以尝试了解实际发生的情况。通过检测所选对象是或曾经是形状,我们可以充分确定此事件是否发生在形状上。
Public WithEvents bars As commandBars
Public old_selection As Object
Private Sub InitialiseEvents()
Set bars = Application.commandBars
End Sub
Private Sub bars_OnUpdate()
'This will call on each user action, here we can check our shapes:
If DetectShape Then
'Shape selected and changed event:
If GetName(old_selection) = GetName(Selection) Then
Debug.Print "Shape Changed"
Else
Debug.Print "Shape Selected"
End If
End If
Set old_selection = Selection
End Sub
Private Function GetName(ByVal obj As Object) As String
On Error Resume Next
GetName = obj.Name
End Function
Private Function DetectShape() As Boolean
On Error GoTo endDetect
DetectShape = Selection.ShapeRange.Count > 0
endDetect:
End Function只要选择了形状,运行InitialiseEvents()就会打印"Shape Selected",每当形状可能更改了时,就会打印"Shape Changed"。注意,我将检测形状是否确实改变的任务留给了您。
发布于 2017-02-25 05:44:50
excel对象模型没有任何用于控制形状操作的事件。你需要使用visual studio来实现它。请看以下内容:
https://stackoverflow.com/questions/42442940
复制相似问题