I recently wrote an article comparing Metric and US Units in Visio for floor plans (see Metric vs US Units in Visio floor plans). The intention was always to create right mouse actions on a Visio floor plan border shape to provide many alternative page sizes and scales. I have now done this, with the help of Excel and LinqPad.
The action formulas in the ShapeSheet all create multiple SETF(..) formulas that emulate the actions performed by the multiple tabs in the Page Setup dialog, but simplified into a single action:
SETF(GetRef(ThePage!DrawingSizeType),@DrawingSizeType)+ SETF(GetRef(ThePage!DrawingScaleType),@DrawingScaleType)+ SETF(GetRef(ThePage!DrawingResizeType),@DrawingResizeType)+ SETF(GetRef(ThePage!PageScale),@PageScale)+ SETF(GetRef(ThePage!DrawingScale),@DrawingScale)+ SETF(GetRef(ThePage!PageWidth),@PageWidth)+ SETF(GetRef(ThePage!PageHeight),@PageHeight)+ SETF(GetRef(ThePage!PagesX),1)+ SETF(GetRef(ThePage!PagesY),1)+
SETF(GetRef(ThePage!PrintPageOrientation),2)+ SETF(GetRef(ThePage!PageLeftMargin),@PageLeftMargin)+ SETF(GetRef(ThePage!PageTopMargin),@PageTopMargin)+ SETF(GetRef(ThePage!PageRightMargin),@PageRightMargin)+ SETF(GetRef(ThePage!PageBottomMargin),@PageBottomMargin)+ SETF(GetRef(ThePage!BlockSizeX),@BlockSizeX)+ SETF(GetRef(ThePage!BlockSizeY),@BlockSizeY)+ SETF(GetRef(ThePage!AvenueSizeX),@AvenueSizeX)+ SETF(GetRef(ThePage!AvenueSizeY),@AvenueSizeY)+ SETF(GetRef(ThePage!LineToNodeX),@LineToNodeX)+ SETF(GetRef(ThePage!LineToNodeY),@LineToNodeY)+ SETF(GetRef(ThePage!LineToLineX),@LineToLineX)+ SETF(GetRef(ThePage!LineToLineY),@LineToLineY)
I made an unexpected discovery … it appears that Visio has a limit of 38 custom Action rows in the ShapeSheet that can be displayed, even though many more can exist in the ShapeSheet.
This the Excel workbook that I created to view the pages sizes, orientations and scales: Visio Pages and Scales Excel document
This is a Visio diagram used in this example : Pages and Scales Visio document