У меня есть несколько фигур на чертеже 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?
Как я могу использовать элементы массива в себе?обозначение каждой строки, которую я добавляю?