Vba 在Visio中捕获FormulaChanged事件
我是Visio中VBA的新手,在“获取”不在文档对象级别的事件处理时遇到问题。也就是说,我试图捕获当形状数据值更改时触发的事件。我已下载Visio 2010 SDK,相关事件已更改为FormulaChanged和CellChanged。然而,我不知道如何触发这些事件。我从互联网上收集了需要与Events和/或AddAdvise一起使用的信息,但我似乎不知道该如何使用,甚至已经阅读了一些SDK代码示例Vba 在Visio中捕获FormulaChanged事件,vba,events,event-handling,shape,visio,Vba,Events,Event Handling,Shape,Visio,我是Visio中VBA的新手,在“获取”不在文档对象级别的事件处理时遇到问题。也就是说,我试图捕获当形状数据值更改时触发的事件。我已下载Visio 2010 SDK,相关事件已更改为FormulaChanged和CellChanged。然而,我不知道如何触发这些事件。我从互联网上收集了需要与Events和/或AddAdvise一起使用的信息,但我似乎不知道该如何使用,甚至已经阅读了一些SDK代码示例 如何在VBA中捕获编辑形状数据值时触发的FormulaChanged和/或CellChanged
如何在VBA中捕获编辑形状数据值时触发的FormulaChanged和/或CellChanged事件?您似乎已经意识到,您有一些触发这些事件的选项:
Public WithEvents app As Visio.Application
Public WithEvents Pg As Visio.Page
Public WithEvents Shp As Visio.Shape
Private Sub app_CellChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub app_FormulaChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub Class_Initialize()
Set app = Application
Set Pg = ActivePage
Set Shp = ActiveWindow.Selection(1)
End Sub
Private Sub Pg_CellChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub Pg_FormulaChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub Shp_CellChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub Shp_FormulaChanged(ByVal Cell As IVCell)
PrintCell Cell
End Sub
Private Sub PrintCell(Cell As Visio.Cell)
Debug.Print Cell.Shape.ContainingPage.Name & "!" & Cell.Shape.Name
End Sub
我不确定这是否回答了您的问题,但也许这只是一个开始。我将您的代码放在ThisDocument对象中。我将MsgBox“Test”添加到每个对话框中,这样我就可以得到一个对话框。然后我尝试编辑一些形状数据。我可以看到FormulaChanged和CellChanged事件,但无论是通过MsgBox还是调试消息区域,都不会发生任何事情。但是,如果我移动形状,Visio会减慢速度,但这可能是事件监视程序的问题。已确认移动形状会更新一组单元格和公式,我的减慢速度来自事件监视程序。但是,上面的代码从未为我触发(至少,调试窗口中没有显示任何内容)。您是否先运行了类_initialize子?这需要运行以设置事件。。