我在Visio中有一个VBA代码,如果所述形状是超链接的,它将改变形状的颜色。现在,我使用一个简单的命令按钮来运行它。我希望在工作表中发生更改时运行宏。我知道如果我想这样做,我只需将我的代码放在Workbook_Change子中,但在Visio中我丢失了。
这是我目前的代码:
Private Sub CommandButton1_Click()
Dim Sh As Visio.shape
Dim Link As Hyperlink
For Each Sh In Visio.ActivePage.Shapes '<~ loop through the shapes collection
For Each Link In Sh.Hyperlinks '<~ loop through the links collection
If Not Link.Address = "" Then '<~ check for a blank address
Sh.Cells("Fillbkgnd").Formula = "RGB(255,102,0)"
Sh.Cells("Fillforegnd").Formula = "RGB(255, 102, 0)" '<~ apply a color to the shape
End If
Next Link
Next Sh
End Sub
有什么想法吗?
答案 0 :(得分:1)
@JonFournier我已经重新审视了这个,这是我的代码,它存在于ThisDocument中:
Public WithEvents Pg As Visio.Page
Private Sub Pg_CellChanged(ByVal Cell As IVCell)
Set Pg = Pages("Page-1")
If Cell.Section = visSectionHyperlink Then
Dim Sh As Visio.shape
Dim Link As Hyperlink
For Each Sh In Visio.ActivePage.Shapes '<~ loop through the shapes collection
For Each Link In Sh.Hyperlinks '<~ loop through the links collection
If Not Link.Address = "" Then '<~ check for a blank address
Sh.Cells("Fillbkgnd").Formula = "RGB(255,102,0)"
Sh.Cells("Fillforegnd").Formula = "RGB(255, 102, 0)" '<~ apply a color to the shape
End If
Next Link
Next Sh
Else
End If
End Sub
我放入的代码在与命令按钮配对时工作得很好,但我希望它在形状改变时起作用。我应该在代码中添加什么来“实例化对象”或让它以我需要的方式运行。我似乎无法得到任何工作。感谢帮助。
再次,我很抱歉这是一个答案,我的工作防火墙不允许我出于某种原因发表评论。
答案 1 :(得分:0)
您可以在Page对象上捕获CellChanged事件,并检查更改的单元格是否在超链接形状表部分中。
在课程模块中:
Public Withevents Pg as Visio.Page
Private Sub Pg_CellChanged(ByVal Cell as IVCell)
If Cell.Section = visSectionHyperlink Then
' call your code here
End If
End Sub
你需要实例化对象并使其保持活动状态以监控你的活动页面,但我认为这是对你有用的一般要点。
如果你喜欢这个,那么这也可以在ThisDocument中幸福地生活。