如何在FormulaU中输入字符串变量?

时间:2019-05-17 08:37:30

标签: vba visio visio-vba

我在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)':   #名字?

如何在设置要添加的每一行的标签时使用数组的元素?

1 个答案:

答案 0 :(得分:3)

您需要在文本周围加上Chr(34)。 34是“

所以你需要

= Chr(34)&表达式&Chr(34)