Making Wiring Diagrams In Visio

A lot of professionals rely on AutoCAD or other CAD-based tools for broadcast facility design. Visio is typically used for making concept and workflow drawings, sometimes also for network and rack diagrams. But can we use less expensive tool for more design tasks? Despite scepticism I think that Visio has good chances. It’s very flexible software, it can be used as a replacement of other CAD systems in some cases (not all, of course), but require some kind of tweaking.


“Look & feel” of Visio is very different than CAD ones. Many CAD users prefer to use bright lines and dark backgrounds; it’s much more eye-friendly. Visio is WYSIWIG-style diagram editor, there is no simple way to change or switch background and grid colors. Well, it is partially possible: in Visio 2003 background color can be changed in options, but not in other versions: it’s always white. Grid color still can be changed in registry (HKCU\Software\Microsoft\Office\…\Visio\Colors). Anyway, it’s just inconvenient to restart Visio every time just to change a ‘look’. Starting from version 2007 there is the powerful theme ‘engine’, so why not to tame it? In my template I decided to use a small set of very minimalistic themes optimized for wiring diagrams, and completely turn off any other themes and effects:


It’s almost like old-good Visio 2003. Now I can switch only between my themes or turn them off before printing:


Built-in VBA code changes colors and backgrounds depending on the current theme. It’s not as quick as it works in CAD programs – switching themes may take minutes depending on diagram complexity – but it’s still better than nothing. For a while I haven’t found a better way, fortunately it’s rarely needed. Maybe it will be easier in Visio 2013, or some “hacking” may help?

Small note about colors: it’s more safe to use system and/or custom colors then theme-dependent ones: they’ll always stay the same. Even more: I’m sure that it’s better do not use colors at all to avoid any misunderstanding.

“Feel” is more complex thing, there are many things which CAD users may miss in Visio, e.g. there are no “classic” command line window. But there are some alternatives: as a minimum there is built-in VBA. More advanced technics may include using of PowerShell or Python scripts and VB/C# programming. The simplest way is to implement all the necessary operations as macros in VBA.

The real advantage of Visio is SmartShapes, which may contain some built-in logic, call add-ons etc. I use this feature in my template to implement resizable 2D blocks with variable count of input/outputs and “smart” wires that can detect which blocks they’re connected to and assign matching connector types:


Wiring diagrams are all about boxes and arrows, so there is no need in large shape libraries, they just have to be more universal and flexible. “Component” shape covers 99% of needs; I also added some more shapes:


Each shape has a rich set of data and supported by the VBA code in the template.

There are a lot of complains about ribbon UI in Visio and other Office programs, but I think it’s not so bad and can be really very convenient. In my template I placed most often used macros and reports in a special ribbon tab:


Built-in reporting with export to Excel may be used for making lists of equipment and cables. All the logic is implemented in VBA code in the template file. It’s the simplest way of distribution, but some later after polishing I’ll probably made an add-in to keep all the code in the single place.

Resume: can we use Visio as CAD replacement for wiring diagrams? Yes, it’s possible, some additional templates & code may improve usability a lot. Unfortunately MS pays not enough attention to CAD-like Visio features, paying more attention to visual enhancements. Anyway, why not to try?

You can download template, shapes and sample drawing here. Comments are welcome. Important note: it’s intended to use with Visio 2010, earlier version do not support some functions heavily used in shapes and VBA code.

Tags: , , , , , ,

17 responses to “Making Wiring Diagrams In Visio”

  1. Bence says :

    Thanks for sharing this, it’s very useful. But is there any way to create a component with more than 128 in and outputs? It would be a great help to me.
    Thanks for your reply.

  2. Sumit Simlai says :

    Hi, it makes interesting reading on the subject. I am looking for something quite similar except that I was thinking if there could be a way that I could port a complete database listing wiring charts and connections between devices, to VIsio such that a diagram is automatically generated from the database. Is this a ridiculous expectation? Or are there any such software? I do home recording studio work so have to deal with millions of cabling.

    • Dmitry Ivanov says :

      Well, the source code is totally open. You can improve it. I don’t know any software that can create schemes from specifications, but there are some solutions that can create specs from drawings: D-tools, Vidcad. May be overkill for home studio systems.

  3. Randy Mikesell says :

    I have just switched to 2013, and I am having a small issue with the Wire List report. It is telling me the report definition is invalid? Do I just have to add the type of output? Thanks. I love what you have done so far. I have a bunch of code that does a lot of these very similar in Visio 2002, and it doesn’t work in the new versions I am still running 2002 because of this. You template may just be the step I need to upgrade… Thanks for posting this module…

  4. Michael says :

    Dimitry, it works great in Visio 7 except, the wire labels sometimes go wonky when i place a new wire or copy and paste a wire. Is this a problem with 2007? Am i doing something wrong, or is there a fix?

    • Dmitry Ivanov says :

      There may be some problems with 2007 or older versions. Some required functions are missing in Visio 2007, that’s why I recommend to use Visio 2019 or 2013.

  5. Mark says :

    I dont think one can connect wires to other wires

  6. Jason Piazza says :

    Is there a way to create/extract a pull schedule based on the wire labels?

    • Dmitry Ivanov says :

      It’s already there: click on “Wire List”. You’ll get a complete list of all the cables.

      • Jason Piazza says :

        That’s great. Now if only I could find a way to manipulate your device blocks to look like this sample:

        I need to use the I/O flags as required by the folks I work for. I was able to use your connector wires perfectly, but like the way they automatically populate connector types when connected to your device blocks. Would it be a big PITA for me to change your device blocks to include the I/O flags?

        • Dmitry Ivanov says :

          You’ll have to create a copy of “Component” shape and edit it: move text boxes with i/o names ‘outside’, add more boxes for connector type labels, move connection points, add formulas etc. Not so complex, but will take some time.

  7. Chris says :

    Dmitry, this seems like an excellent solution! Thanks for sharing this

  8. Jon Poubj says :


    Your components (such as the Terminal Panel) are made of a large number of sub-shapes (for each input) that you hide or show depending on the number of inputs for the component.

    All sub-shapes have the same formulas in their shapesheet. How did you create the sub-shapes and duplicate the shapesheet formulas to all the sub-shapes that are in a component ? — so they all have the same formulas (only the User.Number cell changes).

    I am trying to do something similar, but I cannot happen to propagate the formulas to all sub-shapes. For instance when copy/paste a sub-shape with Visio, I get a REF() error for references.


    Basically, I wonder how you created all the sub-shapes in a component to start with. And if you have to change a formula, how do you propagate that change to all sub-shapes.

    Thanks for your kind help,

    • Dmitry Ivanov says :

      You can’t copy/paste subshapes because every subshapes references some parameters from the parent group shape (e.g. number of inputs or outputs), that’s why you see errors (User.Visible=IF(REF()<User.Number,FALSE,TRUE)). In short words main steps are:
      1) create & test subshapes, without references to any other shape data
      2) combine subshapes into the single group and add some parameters (like number of inputs/outputs etc)
      3) select all the subshapes within group and apply formulas for each selected subshape using VBA script. These formulas may reference some group or page parameters. Scripts may be deleted later.

Leave a Reply

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

You are commenting using your 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


Get every new post delivered to your Inbox.

Join 71 other followers

%d bloggers like this: