Как с помощью VBA получить информацию о пользовательской фигуре из диаграммы Visio 2003.
Как получить информацию о пользовательской форме Visio с помощью VBA
Ответы (2)
Чтобы получить информацию о пользовательской фигуре из фигуры Visio, выполните указанные ниже действия.
Function GetCustomPropertyValue(TheShape As Visio.Shape, ThePropertyName As String) As String
On Error Resume Next
GetCustomPropertyValue = TheShape.CellsU("Prop." & ThePropertyName).ResultStr(visNone)
End Function
Все, что делает эта функция, это использует свойство cellu в форме, чтобы получить ячейку пользовательского свойства ShapeSheet по имени...
Если вы сторонник использования возобновления при ошибке, вы можете проверить, существует ли ячейка, сначала проверив, существует ли ячейка:
if TheShape.CellExistsU( "Prop." & ThePropertyName , 0 ) then
GetCustomPropertyValue = TheShape.CellsU("Prop." & THePropertyName).ResultStr(VisNone)
person
Jon Fournier
schedule
03.02.2009
CellExistsU
возвращает целое число в соответствии с документацией. а>. Вы уверены, что его можно использовать как логическое значение (0 — ложь, ненулевое значение — истина)?
- person jpmc26; 23.02.2018
да, я уверен, в документации на самом деле не сказано, что возвращается, но я много раз использовал его как логическое значение.
- person Jon Fournier; 26.02.2018
Нашел это по адресу http://visio.mvps.org/VBA.htm (Пользовательские свойства )
Public Sub CustomProp()
Dim shpObj As Visio.Shape, celObj As Visio.Cell
Dim i As Integer, j As Integer, ShpNo As Integer
Dim LabelName As String, PromptName As String, ValName As String, Tabchr As String
Open "C:\CustomProp.txt" For Output Shared As #1
Tabchr = Chr(9)
For ShpNo = 1 To Visio.ActivePage.Shapes.Count
Set shpObj = Visio.ActivePage.Shapes(ShpNo)
nRows = shpObj.RowCount(Visio.visSectionProp)
For i = 0 To nRows - 1
Set celObj = shpObj.CellsSRC(Visio.visSectionProp, i, 0)
ValName = celObj.ResultStr(Visio.visNone)
Set celObj = shpObj.CellsSRC(Visio.visSectionProp, i, 1)
PromptName = celObj.ResultStr(Visio.visNone)
Set celObj = shpObj.CellsSRC(Visio.visSectionProp, i, 2)
LabelName = celObj.ResultStr(Visio.visNone)
Debug.Print shpObj.Name, LabelName, PromptName, ValName
Print #1, shpObj.Name; Tabchr; LabelName; Tabchr; PromptName; Tabchr; ValName
Next i
Next ShpNo
Close #1
End Sub
person
Geej
schedule
08.10.2010