0
votes

I'm beyond the limits of my kindergarten-level VBA skills so would like to ask if anyone here can help me write a VBA script to help me work stepwise through my Word document and adjust the anchoring position of all the AutoShapes in the document.

I have a 400-page book in Microsoft Word with at least one and sometimes several marginalia (sidenote) on each page in a thin column to the left of the main body text column. These sidenotes are a concise 'pointer' to a particular point made in the body text and need to appear directly to that point's left.

Each sidenote is in its own AutoShape (within a textbox in that shape). The AutoShapes were placed by the author in an inconsistent way. Mostly they are anchored to a position on the page.

However, I need to repaginate. This will cause the body text to flow differently and I need the sidenotes to flow with it (approximately or exactly)!

So before I repaginate I want to make sure I anchor each AutoShape to the paragraph it belongs to and not to the page it is currently on.

I don't know if that can be done automatically, since I don't know how Word could deduce a purely spatial relationship between an AutoShape and a paragraph.

So I'm guessing I have to make do with a "semi-automatic" process. Something like this:

  • Press a button to start VBA script
  • Select next AutoShape
  • Prompt for user to enter cursor in body text where anchor is to be placed
  • Resume macro
  • Place anchor for that AutoShape in that position
  • Change vertical position paramater of AutoShape to "relative to paragraph" and "0 mm"
  • (Alternative, not 0 mm but another value deduced to more accurately position AutoShape)
  • Change width parameter of AutoShape to a particular fixed value 37 mm (some of them were a little inaccurately drawn)
  • End cycle and go back to beginning to
  • Select next AutoShape

Hope that is all understandable.

I've tried to record a VBA script to do some of this but have no idea how to build in the user prompt.

Any help much appreciated!

Craig

2

2 Answers

0
votes

You may be better off creating a macro that works on one shape at a time, or anchor all the shapes manually (which you're almost doing anyway) and then write a macro to take care of the various parameters and settings you want.

If you really want to prompt the user while the macro is running you'll need to look into modeless dialogs (not possible on the Mac). See this link: http://www.bettersolutions.com/vba/VXV113/SE846743531.htm

Basically, you'd have to create your own dialog and then show it modelessly so that the user could still place the cursor before hitting OK. If you're new to VBA, this could be difficult to set up.

0
votes

While searching for solutions to this, I found a post on another forum from someone trying to do something very similar. He was developing a set of tools for editors using Word and until I find the ultimate solution I am using his "Shapes" tool which allows me to change parameters on each AutoShape I select at-a-click instead of opening up and closing a dialogue box each time, plus selecting a different tab each time... His tools can be downloaded at his Editors' Toolkit website.