我在Visio绘图中有一些形状,其中包含作为形状数据的列表。所有数据都在“数据集”中定义,我将其应用于所有模具。我将不时需要添加更多的模具并更新数据集(在列表中插入新项目)。因为每次更新列表时,Visio都会删除当前列表并创建一个新列表,所以我会丢失使用该数据集的所有形状中的数据。
为解决这个问题,我编写了一些VBA代码,这些代码将创建一个临时存储并在更新数据集时保存与每种形状相对应的列表项。
下面是我写的。
Sub AddTemp()
Dim vPage As Visio.Page
Dim vShape As Shape
Dim vRowInt As Integer
Dim vCell As Cell
Dim MyList As Variant
Dim vValue As String
Dim vLabel As String
'Shape Data defined as Fixed/Variable List:
MyList = Array("List1", "List2")
'Loop through each page of the document
For Each vPage In ThisDocument.Pages
'Loop through each shape of each page of the document
For Each vShape In vPage.Shapes
'If ShapeData exists, do your thing
If vShape.SectionExists(visSectionProp, 0) Then
'Iterate through each element of the list
For Each element In MyList
'If Temp container does not exist, make one
If Not vShape.CellExistsU("Prop." + element + "Temp", 1) Then
vRowInt = vShape.AddRow(visSectionProp, visRowLast, visTagDefault)
vShape.Section(visSectionProp).Row(vRowInt).NameU = element + "Temp"
vLabel = "=" + element + "Temp"
'MsgBox vLabel
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = "=vLabel"
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsType).FormulaU = 0
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsFormat).FormulaU = ""
If vShape.CellExistsU("Prop." + element, 1) Then
vValue = "=Prop." + element + ".Value"
'MsgBox Value
Set vCell = vShape.CellsU("Prop." + element + "Temp.Value")
vCell.FormulaU = vValue
End If
End If
Next
End If
Next
Next
MsgBox "Temporary Storage Created"
End Sub
我目前遇到的问题是以下语句:
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = vLabel
我想在MyList中的元素功能中设置我创建的行的Label列,但是无论我尝试使用什么,它似乎都不起作用:
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = element
或
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = `element`
或
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = "element"
或
vShape.CellsSRC(visSectionProp, vRowInt, visCustPropsLabel).FormulaU = "=element"
等
下面的代码可以正常工作,
vValue = "=Prop." + element + ".Value"
vCell.FormulaU = vValue
我希望FormulaU接受MyList数组的字符串元素,而我得到
运行时错误'-2032466907(86db0425)': #名字?
如何在设置要添加的每一行的标签时使用数组的元素?
答案 0 :(得分:3)
您需要在文本周围加上Chr(34)。 34是“
所以你需要
= Chr(34)&表达式&Chr(34)