当Excel 2010中的插入菜单中绘制的文本框发生变化时,有人可以确认VBA中是否有事件?我尝试了RelevantTextBoxName_Change()
,但即使文本框的内容发生了变化,也没有调用sub。
它是一个" Shapes"文本框。
感谢。
答案 0 :(得分:0)
excel对象模型没有任何事件来控制带形状的操作。你需要视觉工作室来实现它。见:
答案 1 :(得分:0)
lbo提供的答案也可以在普通的vba中很容易地完成:
将其粘贴在工作簿或工作表模块中:
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()
。您甚至可以在工作簿开始时运行它。您会注意到,更改形状时会打印“更改形状”,而选择形状时会打印“选择形状”。可能有些情况无法解决,但适用于大多数使用情况。
或者使用this