2009-02-03 22 views
5

VBA kullanarak, özel şekil bilgilerini bir Visio 2003 şemasından nasıl alabilirim.Visio özel şekil bilgilerini VBA ile nasıl edinirim?

olursa ...

Function GetCustomPropertyValue(TheShape As Visio.Shape, ThePropertyName As String) As String 
    On Error Resume Next 
    GetCustomPropertyValue = TheShape.CellsU("Prop." & ThePropertyName).ResultStr(visNone) 
End Function 

Bütün bu fonksiyonudur yapar adıyla özel özellik Şekil Sayfası hücreyi almak için bir şekli cellsu özelliğini kullanır:

cevap

6

özel olsun bir Visio şekilden şekil bilgisi için hücre varsa bir sonraki hata özgeçmiş kullanma konusunda titiz değilsin, hücre varsa ilk kontrol ederek kontrol edebilirsiniz:

if TheShape.CellExistsU("Prop." & ThePropertyName , 0) then 
GetCustomPropertyValue = TheShape.CellsU("Prop." & THePropertyName).ResultStr(VisNone) 
+0

'CellExistsU' [belgeleri] (https://msdn.microsoft.com/en-us/vba/visio-vba/articles/shape-cellexistsu- göre olan bir tam sayı döndürür özellik-visio). Bir boolean olarak kullanılabileceğinden emin misiniz (true için false, non sıfır)? – jpmc26

+0

Evet, eminim, belgeler gerçekten ne döndüğünü söylemiyor ama ben pek çok kez bir boole olarak kullandım. –

3

, bu Bulunan(özel özellikler)

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