问题描述
作为实施一项新技术的一部分,我正在为企业中的多个站点创建图表。我已经在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
解决方法
我注意到一件事是在行# from django.utils.six import string_types
from six import string_types
上-后者应该是Set vsoCharacters = vsoShape.Charaters
而不是vsoShape.Characters
-因为这实际上被设置为空白(什么都没有),所以没有什么可做的“替换”,什么都没有改变。
之所以没有出现,是因为较早地执行了“在错误恢复下一个”语句,从而抑制了错误消息并继续执行。