Excel VBA更新Visio网络图模板

问题描述

作为实施一项新技术的一部分,我正在为企业中的多个站点创建图表。我已经在Excel文档中收集了信息,并且可以使用VBA从该文档中更新各种Word文档和Excel文档,可以将电子表格的部分图片以及Visio模板示例和所需的最终状态在下面找到。

在多个网站中搜索后,我能够想到以下代码,这些代码将打开Visio模板,但似乎无法按预期更新它。据我所知,我似乎正在经历各种形状,正如我提到的那样,这些值并未按预期更新。

在此先感谢您的帮助和建议。

Sub UpdateVisioTemplate()
Dim vDocs As Visio.Documents  'Documents collection of instance.
Dim vsodoc As Visio.Document  'Document to work in
Dim vsoPage As Visio.Page     'Page to work in.
Dim vsoPages As Visio.Pages   'Pages collection of document.
Dim vApp As Visio.Application 'Declare an Instance of Visio.
Dim vsoShape As Visio.Shape   'Instance of master on page.
Dim vsoCharacters As Visio.Characters
Dim DiagramServices As Integer

Dim VarRow As Long
Dim FileName,DocName,VarName,VarValue,SiteID,SiteType,Wave,SiteName As String
'Dim vContent As Word.Range
With ActiveSheet
    DocName = .Cells(1,6).Value
    SiteType = .Cells(1,25).Value
    SiteID = .Cells(20,5).Value
    SiteName = .Cells(21,5).Value
            
    On Error Resume Next  'Check if Visio is already running
    'Set vApp = CreateObject("Visio.Application")
    Set vApp = Getobject(,"Visio.Application")
    If Err.Number <> 0 Then    'not equal to 0
        Err.Clear
        Set vApp = CreateObject("Visio.Application")
    End If
    vApp.Visible = True
    Set vDocs = vApp.Documents.OpenEx(DocName,&H1)
    '(DocName)
    'Set vDocs = vApp.Documents.Open(DocName)
    Set vsoPages = vApp.ActiveDocument.Pages
    
    DiagramServices = vApp.ActiveDocument.DiagramServicesEnabled
    vApp.ActiveDocument.DiagramServicesEnabled = visServiceVersion140

    LastRow = .Range("A999").End(xlUp).Row
    For Each vsoPage In vsoPages
        For VarRow = 2 To LastRow 'from Row 2 to the last row
            For Each vsoShape In vsoPage.Shapes
                VarName = .Cells(VarRow,1).Value  'VariableName
                VarValue = .Cells(VarRow,2).Value 'VariableValue
                If Len(VarValue) = 0 Then   'If the variable value is blank,keep the variable in place
                    VarValue = .Cells(VarRow,1).Value
                End If
                Set vsoCharacters = vsoShape.Charaters
                vsoCharacters.Text = Replace(vsoCharacters.Text,VarValue)  'Find and replace the variables with the appropriate value
            Next vsoShape
        Next VarRow
    Next vsoPage
End With 'Active Sheet
vDoc.SaveAs (SiteID & ".vsd")
End Sub

Sample of Excel Data

Visio Diagram Template

Visio Diagram Final

解决方法

我注意到一件事是在行# from django.utils.six import string_types from six import string_types 上-后者应该是Set vsoCharacters = vsoShape.Charaters而不是vsoShape.Characters-因为这实际上被设置为空白(什么都没有),所以没有什么可做的“替换”,什么都没有改变。

之所以没有出现,是因为较早地执行了“在错误恢复下一个”语句,从而抑制了错误消息并继续执行。