Използвайки 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