Excel VBA - 形状文本框OnChange事件

时间:2017-02-24 15:54:07

标签: excel vba events textbox onchange

当Excel 2010中的插入菜单中绘制的文本框发生变化时,有人可以确认VBA中是否有事件?我尝试了RelevantTextBoxName_Change(),但即使文本框的内容发生了变化,也没有调用sub。

它是一个" Shapes"文本框。

感谢。

2 个答案:

答案 0 :(得分:0)

excel对象模型没有任何事件来控制带形状的操作。你需要视觉工作室来实现它。见:

Create new events for shape in 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

相关问题