Auto-Loading Visio VBA Code & Favorites Stencil

Started by IceRafter, February 22, 2025, 08:42:54 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

IceRafter

Creating Visio Autoload Stencils

This guide provides instructions for setting up autoload stencils in Microsoft Visio. The method ensures that a general code library stencil is automatically loaded when Visio starts, and that a favorite user-shapes stencil is loaded with every new or edited drawing.

1. Create Required Stencils
Two empty stencil files are required:
  • _AutoExec.vssm (Macro-enabled stencil for automation)
  • _Favorites.vssx (Standard stencil for commonly used shapes)maximum
  • Leading underscores are optional, use them to 'float'  files to top of directory listings

1.1 Steps to Create Stencils:
  • Open Microsoft Visio.
  • Go to File > New > Blank Drawing.
  • Click More Shapes > New Stencil (Metric or US units).
  • Save the stencils:
    • _AutoExec.vssm: Save as Visio Macro-Enabled Stencil (*.vssm)
    • _Favorites.vssx: Save as Visio Stencil (*.vssx)
  • Store both files in the Visio Stencils folder
1.2 Create shortcut to _AutoExec.vssm
  • Drag-copy existing Visio startup shortcut
  • Rename original Visio startup shortcut to 'Visio (Save)'
  • Edit the properties of drag-copied Visio shortcut to point to _AutoExec.vssm
  • Rename the drag-copied Visio shortcut to 'Visio', and use THIS shortcut to start program going forward

2. Create Modules in _AutoExec.vssm

Two modules are needed:

  • Standard Module: modAutoExec
  • Class Module: clsVisioEventHandler
2.1. Create Standard Module (modAutoExec)
  • Open _AutoExec.vssm in Visio.
  • Press ALT + F11 to open VBA Editor.
  • In Project Explorer, right-click VBAProject (_AutoExec.vssm).
  • Select Insert > Module.
  • Rename the module to
modAutoExec  Add the following VBA
Option Explicit
' Rev A 02-20-2025:  auto-load _Favorites.vssx for new and newly-opened documents
'
' Note 1: Requires clsVisioEventHandler
Dim VisioEvents As clsVisioEventHandler  ' Declare global event handler
Public Sub AutoExec_Initialize()
    Set VisioEvents = New clsVisioEventHandler
    VisioEvents.Initialize Application
    Debug.Print "[DEBUG] AutoExec_Initialize triggered - Event Handler Initialized"
End Sub
Public Sub LoadFavoritesStencil()
    Dim stencilPath As String
    Dim visDoc As Visio.Document
    ' Define the path to the Favorites stencil
    stencilPath = GetRegistryValue("HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Visio\Application", "StencilPath") & "\_Favorites.vssx"
    ' Check if the stencil exists before attempting to open it
    If Dir(stencilPath) <> "" Then
        Set visDoc = Visio.Documents.OpenEx(stencilPath, visOpenRO + visOpenDocked)
        Debug.Print "[DEBUG] _Favorites stencil loaded: " & stencilPath
    Else
        Debug.Print "[DEBUG] ERROR: _Favorites stencil not found at " & stencilPath
    End If
End Sub

2.2. Create Class Module (clsVisioEventHandler)
  • In VBA Editor, right-click VBAProject (_AutoExec.vssm).
  • Select Insert > Class Module.
  • Rename it to
clsVisioEventHandler  Add the following VBA
Option Explicit
Public WithEvents VisioApp As Visio.Application
Public Sub Initialize(ByVal app As Visio.Application)
    Set VisioApp = app
    Debug.Print "[DEBUG] Visio Event Handler Initialized"
End Sub
Private Sub VisioApp_DocumentOpened(ByVal doc As Visio.Document)
    Debug.Print "[DEBUG] Document Opened: " & doc.Name
    LoadFavoritesStencil
End Sub
Private Sub VisioApp_DocumentCreated(ByVal doc As Visio.Document)
    Debug.Print "[DEBUG] Document Created: " & doc.Name
    LoadFavoritesStencil
End Sub

Browser ID: smf (possibly_robot)
Templates: 4: index (default), Display (default), GenericControls (default), GenericControls (default).
Sub templates: 6: init, html_above, body_above, main, body_below, html_below.
Language files: 4: index+Modifications.english (default), Post.english (default), Editor.english (default), Drafts.english (default).
Style sheets: 4: index.css, attachments.css, jquery.sceditor.css, responsive.css.
Hooks called: 299 (show)
Files included: 32 - 1207KB. (show)
Memory used: 1009KB.
Tokens: post-login.
Cache hits: 14: 0.00121s for 26,587 bytes (show)
Cache misses: 4: (show)
Queries used: 17.

[Show Queries]