Как ввести строковую переменную вступления FormulaU? - PullRequest
1 голос
/ 17 мая 2019

У меня есть несколько фигур на чертеже 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

Я хотел бы установить столбец Label строки, которую я создаю, в зависимости от элементов в MyList, но, похоже, он не работает, независимо от того, что я пытаюсь использовать:

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) ': #Name?

Как я могу использовать элементы массива в себе?обозначение каждой строки, которую я добавляю?

1 Ответ

3 голосов
/ 17 мая 2019

Вы должны поместить Chr (34) вокруг вашего текста.34 - это код символа для "

. Вам нужно

= Chr (34) и выражение & Chr (34)

...