Applying Selected DataGraphic to the Whole Document

A recent newsgroup question asked if there is a way to apply a DataGraphic to all pages in a document.  Well, there is no built-in option in Visio 2007 (or Visio 2010), but it can be done with a little bit of VBA.  This blog presents a macro that can be used in most cases.

The specific use case was for an Organization Chart that has many pages, and it can be really tedious to make each page active, select all the shapes, then apply a DataGraphic, so I have written a macro that allows you to apply the required DataGraphic to a single shape, then you select that shape; run the macro to apply the same DataGraphic to all shapes in the document that has a Shape Data row with the same name as the the first Shape Data row in the selected shape.

The screenshots are from the Visio 2010 Beta, but the code will work for Visio 2007 Professional edition too.

image

Before


So, here is the macro that achieves the desired result:

   1: Option Explicit
   2:  
   3: Public Sub ApplyDataGraphicToDocument()
   4: Dim mstDG As Visio.Master
   5: Dim shp As Visio.Shape
   6: Dim pag As Visio.Page
   7: Dim firstProp As String
   8:  
   9:     If Visio.ActiveWindow.Selection.Count = 0 Then
  10:         MsgBox "Please select a shape which already has data graphics"
  11:         Exit Sub
  12:     Else
  13:         Set shp = Visio.ActiveWindow.Selection.PrimaryItem
  14:         If shp.DataGraphic Is Nothing Then
  15:             MsgBox "Please select a shape which already has data graphics"
  16:             Exit Sub
  17:         Else
  18:             'Get the shapes DataGraphic master
  19:             Set mstDG = shp.DataGraphic
  20:             'Get the name of the first Shape Data row
  21:             firstProp = "Prop." & _
  22:                 shp.CellsSRC(Visio.visSectionProp, 0, 0).RowNameU
  23:         End If
  24:     End If
  25:     
  26:     For Each pag In Visio.ActiveDocument.Pages
  27:         If pag.Type = visTypeForeground Then
  28:             For Each shp In pag.Shapes
  29:                 'Check that the named Shape Data row exists
  30:                 If shp.CellExistsU(firstProp, Visio.visExistsAnywhere) Then
  31:                     'Set the DataGraphic
  32:                     shp.DataGraphic = mstDG
  33:                 End If
  34:             Next
  35:         End If
  36:     Next
  37:  
  38: End Sub

image

After

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

davecra.wordpress.com/

Microsoft Office Development, and more...

PowerShell.Amsterdam

Automate, Accelerate, Accurate

johnvisiomvp

Life with Visio and other Microsoft Toys!

Title (Required)

Windows Server Essentials Tips & Tricks

Nilsandrey's Weblog

Just another WordPress.com weblog

Things that Should be Easy

Every so often (too often in the IT industry) I encounter things that should have been very easy to do but turned out to be far too complicated. My favorite topics include SharePoint, .Net development, and software architecture, especially distributed systems.

Visio Guy

Shapes, Stencils, Drawings Templates, Tutorials, Tips & Developer Info for Microsoft Visio

Hannes's Virtual Earth

Tips & Tricks around Mapping and Cloud Computing

Pluralsight blog

be smart, be clear, be visual ...

%d bloggers like this: