Как да извлека информация за персонализирана форма на Visio с VBA

Използвайки VBA, как да извлека информация за персонализирана форма от диаграма на Visio 2003.


person JonnyGold    schedule 03.02.2009    source източник


Отговори (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
comment
CellExistsU връща цяло число според документацията. Сигурни ли сте, че може да се използва като булево (0 за невярно, различно от нула за вярно)? - person jpmc26; 23.02.2018
comment
да, сигурен съм, документацията всъщност не казва какво се връща, но съм го използвал много пъти като булево. - 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