VBA Visio - 如何在更改形状时运行宏

时间:2014-06-26 19:24:23

标签: vba visio

我在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

有什么想法吗?

2 个答案:

答案 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中幸福地生活。