Home > Back-end >  Find Workflow objects 3D in visio
Find Workflow objects 3D in visio

Time:06-27

I´m trying to create a code in vba excel to detect what´s inside the work flow objects - 3D as the ones shown in the following picture:

enter image description here

The pictures are always the same. I have been able to find and select the sentence inside the cell. But I need it to search for all the work flow objects in different visio.

This is where I got to: Dim DiagramServices As Integer DiagramServices = ActiveDocument.DiagramServicesEnabled ActiveDocument.DiagramServicesEnabled = visServiceVersion140 visServiceVersion150

    Dim vsoCharacters1 As Visio.Characters
    Set vsoCharacters1 = Application.ActiveWindow.Page.Shapes.ItemFromID(228).Characters
    Debug.Print vsoCharacters1

I need the code to first find all the work flow objects in different pages in visio and then obtain the sentence within (vsoCharacters1)

CodePudding user response:

Please try this simple code

Sub ttt()
Dim doc As Document ' Variable for Document
Dim pg As Page ' Variable for Page
Dim shp As Shape ' Variable for Shape
Dim txt As String  ' Variable for Shape's text
For Each doc In Documents ' Iterate all documents in Visio application session
    For Each pg In doc.Pages ' Iterate all pages in 'doc'
        For Each shp In pg.Shapes ' Iterate all docunents in 'pg'
            txt = shp.Text ' Define 'txt' variable
            Select Case txt ' Criterion
            Case "ololo", "trololo" ' Found text
                ActiveWindow.Page = pg ' Activate page with criterion
                ActiveWindow.Select shp, visSelect ' Select shape with criterion
                MsgBox "Page: " & pg.Name & ", ShapeID: " & shp.ID, , "A shape was found, the text of which matches the criterion: " & txt
            End Select
            ActiveWindow.DeselectAll ' Unselect a shape
        Next shp
    Next pg
Next doc
MsgBox "TheEnd!!!"
End Sub

Note: This code started in MS Visio, code without recursion, dont find shapes into groups !

CodePudding user response:

May I propose a more systematic approach?

  1. Drawing explorer
  • Make sure you're in developer mode.
  • Switch the drawing explorer on.
  1. Identify the shape to explore
  2. Expand its tree to see its sub-shapes

If you're lucky a pro has made this shape and named the subshapes eg Label, Frame, what ever. This will simplify the access to this shape.

in VBA:

  • shp being your group shape object
  • access the sub-shape via: set subshp = shp.Shapes(name_of_subshape)

This works also for the sub-shapes of the sub-shape.

Otherwise - the sub-shapes are named sheet.234 - you need to find another identification method.

  • Open the shapesheet of the sub-shape (right-mouse-click)
  • Inspect it and try to figure out in how far it differs from the other sub-shapes. That can be a text, user or prop field, a geometry section ... etc.
  • in VBA you would then loop over all the sub-shapes and check for this property.

eg:

for each subshape in shp.Shapes:
  if subshape.CellExists("soAndSo",0) then
   if subshape.Cells("soAndso").ResultStr("") = "thisAndThat" then
     'you found it, do your stuff.

By the way, you don't need to access the characters object of a shape to get its text. It is simply "shp.Text". The characters object is more complexe and lets you do funny stuff with the text.

  • Related