Taylor Adams
Taylor Adams

Reputation: 13

Adding shapes/pages to visio on shape drop

Hello I am fairly new to VBA in visio, and I am trying to add functionality to a visio template so that a page will be added to the active document whenever a specific shape is dropped onto a page. I looked through MSDN and found an example using Application.ShapeAdded function but the active document I am working in doesn't seem to be responding to my modified code.

Private Sub Document_ShapeAdded(ByVal vsoShape As Visio.IVShape)

Dim vsoMaster As Visio.Master
'Get the Master property of the shape.
Set vsoMaster = vsoShape.Master
'If Visio shape added is named "SC" add a new page

If vsoMaster.Name = "SC" Then
    NewPage
End If

End Sub

I drop the shape master "SC", which I confirmed is the name of the shape master, and nothing happens. The MSDN verbage describes Application.ShapeAdded as an event listener to the open application. Am I missing something or is there possibly a better way to do this I am not thinking of?

Here is the MSDN description: https://msdn.microsoft.com/en-us/library/office/ff766392.aspx

Upvotes: 1

Views: 914

Answers (1)

Jon Fournier
Jon Fournier

Reputation: 4327

The Document_ShapeAdded event will only apply to the document in which the VBA code is located.

You'd have to declare an application object withevents and have it watch for that event.

Example (in an object or ThisDocument module):

Private WithEvents App as Visio.Application
Private Sub App_ShapeAdded(ByVal Shape As IVShape)
    Call ActiveDocument.Pages.Add() ' etc..
End Sub

Alternatively, if it's something simple, you could just add a shapesheet CALLTHIS function on the master shape in question, which just fires a VBA routine to add a new page or whatever you have to do.

Upvotes: 0

Related Questions