我不熟悉在Visio中做VBA,而且我遇到了“获取”不在Document对象级别的事件处理的问题。也就是说,我正在尝试捕获Shape Data值更改时触发的事件。我下载了Visio 2010 SDK,相关事件是FormulaChanged和CellChanged。但是,我不知道如何触发这些事件。我从互联网上收集到我需要使用WithEvents和/或AddAdvise,但我似乎无法弄清楚如何,甚至已经通过一些SDK代码示例。
如何在VBA中捕获在编辑形状的Shape Data值时触发的FormulaChanged和/或CellChanged事件?
你有一些触发这些事件的选项,你似乎已经意识到:
对于1-3,设置起来非常简单。我还没试过4。
在类/ ThisDocument模块中:
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
我不确定能回答你的问题,但也许这是一个开始。