首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBA - Shapes OnChange事件

Excel VBA - Shapes OnChange事件
EN

Stack Overflow用户
提问于 2017-02-24 23:54:07
回答 2查看 1.5K关注 0票数 0

有人能确认在VBA中是否存在从Excel 2010的插入菜单中绘制的文本框发生更改的事件吗?我尝试了RelevantTextBoxName_Change(),但即使文本框的内容已更改,也不会调用sub。

这是一个“形状”文本框。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-07-15 17:02:25

我建议您使用this implementation

上面的库使用了@lbo建议的VBA实现。它本质上是一种从现有事件创建“假事件”的方式,这些事件已经捕获了你想要的功能。在这种情况下,我们使用CommandBars_OnUpdate事件(每当形状被更改/删除/选择/取消选择/创建时,该事件似乎都会触发。然后,我们对excel工作簿的当前状态进行筛选,以尝试了解实际发生的情况。通过检测所选对象是或曾经是形状,我们可以充分确定此事件是否发生在形状上。

代码语言:javascript
复制
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"。注意,我将检测形状是否确实改变的任务留给了您。

票数 2
EN

Stack Overflow用户

发布于 2017-02-25 05:44:50

excel对象模型没有任何用于控制形状操作的事件。你需要使用visual studio来实现它。请看以下内容:

Create new events for shape in Excel

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42442940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档