Most Visio users should know that there is a built-in basic report writer. I use it often, but I do get frustrated sometimes. I wrote a chapter about it in my 2007 book (see https://bvisual.net/resources/visualizing-information-with-microsoft-visio/ ), where I explained how you can edit the XML of an external report to change the column headers, but this can be a bit of a pain if the report is embedded in you document. Therefore, I have written some VBA code to provide the ability to edit embedded report column headers.
For example, here is a standard report for equipment within a rack:
As you can see, there are four columns:
- <X Location>
- <Y Location>
- Height in U’s
- <Master Name>
These are the default column headers that you can select using the Report Definition Wizard. The angle brackets, “<…>”, denote that these are not Shape Data or User-defined Cells, but are one of the selected other properties.
I also grouped by then <X Location>, which is the easiest way of grouping by each Rack:
Finally, I sorted by the <Y Location> descending, because it is easier to see the correlation with the Rack elevations.
However, the header text of each these columns do not suit my report, so I want to change them. You can
I have created a small VBA project in a Visio stencil, which you can download from https://1drv.ms/u/s!AoRdXTjKEAo1im91GIZT28KeEDZk
The VBA project within the stencil includes two modules from the Visio SDK Sample Code library (modFormulaToString and modStringToFormulaForString) but also has basic classes for a report definition and report fields:
The code required a reference to Microsoft XML (my latest version is v6.0):
The Report Definitions are stored as strings within User-defined cells in the document’s ShapeSheet:
The code parses the XML text to create objects for each field in each report, then presents them in a form for you to select display names to edit.
If you save this stencil to your “My Shapes” folder (or somewhere else where your Visio looks for stencils), then you can simply open the stencil when you want to use it.
The stencil has just one public sub function, ListReports, which can be easily run from the Macros dialog
This will present a list of all of the reports within the document.
Notice that there are three columns in the Fields list box. The first column is just the display order, and the second column is the internal Name of the column, followed by the DisplayName. So, for example, the X Location column is actually known as PINXINFO internally.
You can then edit the Display Name for each of the columns, as required, and then Save the changes.
Then, when you run the report again, you will see that the column headers have been changed accordingly.
Fortunately, these changes are persisted in the report definition text, so you can use both the built-in Reports Definition Wizard and this VBA Report Enhancer whenever you like.