It must be one of the most asked questions about macros - why has it not been addressed in the macro language after all these years?

Anonymous
2013-02-19T05:49:37+00:00

To those of us who are just users and not programmers, it seems like MS Word "macros" -- particularly recorded macros -- ought to include the capability to be easily constructed to (1) go to some identifiable place in a document and "do" some things starting from that point (such as "find" a new paragraph immediately followed by the word "publish", then go to the end of that line of text and insert "**") and then (here comes the sticking point) (2) repeat that series of activities over and over UNTIL some identifiable point is reached in the document [e.g., the end of the page; the end of the document; the end of the paragraph]. 

But for some reason, Word macros cannot be made to do that in an "easy for non-programmers to understand" sort of way.  I've had it explained to me several times that I must use references to "ranges" and/or "counts" and all sorts of other commands that seem overly complicated to just "go to a place and do this", then go to the next such place, and do the same thing", and keep doing that UNTIL . . .  It's certainly nothing that can be accomplished by recording a macro (as it logically should be.)   With help, I'll finally get a macro cobbled together to do what I need done.  But when the next occasion to do something like that comes along -- maybe a year later -- I've forgotten all those inscrutable concepts and I once again find myself just needing to record a macro doing some set of activities and then have it repeat itself through the document.

I know it's easy for programmers to understand all these arcane requirements to be able to get a macro to work through a document that way, but a lot of us "out here" are just regular users who occasionally need to be able to do repetitive tasks within a particular document and believe it should be easier to accomplish this sort of thing than it appears the macro language permits. 

Can someone explain why the macro language cannot be made to easily allow a macro to just do something like: 

   DO         [find <text>, then move from there to another point 8 characters away and then make some change to the text at that point], then     LOOP (DOing that same series of things again} UNTIL [the End of the Page or the End of the Document is reached], then just Stop the macro from further executing.

I'm sure I haven't used the right syntax above, but I hope you get the point - it ought to be just that simple to accomplish that sort of chore, but it isn't. 

Can anyone explain WHY the macro language CAN'T work this way or, if it could be made to do so, why Microsoft has not done it in all these many years while countless ordinary users have struggled with (and posted questions all over the Internet about) this specific concept?

Microsoft 365 and Office | Word | For home | Windows

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments
Answer accepted by question author
Anonymous
2013-02-24T17:37:41+00:00

D PaulDalton,

Glad I could help and I understand your comments and concerns. 

Unfortunately, I don't know if your suggestions will ever get any traction even if they made it to the "right person.  In line with what Jay and Peter have said, my experience is that VBA becomes less and less complete as Word progresses rather than more and more complete.  For example, everything that you could do as a user with a drawing or shape object in Word 2003, you could do with VBA.  With the new graphics engine introduced with Word 2010, there are many things that a user can do that now cannot be done with VBA.  Most of the things that you can do with those graphics are not even recorded.  I suspect that the recorder will go away before it becomes anything like you envision.  Still, it is a good and valid vision.

Good luck.

Was this answer helpful?

0 comments No comments
Answer accepted by question author
Anonymous
2013-02-22T17:33:28+00:00

I have a few observations, and that's probably about all I'll be able to contribute here.

In order to get much further with getting Microsoft to do this, you'll need to get your idea onto their agenda. While it's possible that ideas posted here sometimes get some attention from them, you can't guarantee it: you aren't really dealing with Microsoft people (it's mostly volunteers), and certainly not the Microsoft product group people, in here. So you either need to know someone, or find a proxy (either someone close or perhaps an influential corporate that can see the value of the idea). As for timing, I don't know what their product cycle looks like now, either - it could well be changing rapidly as their Office 365 subscription service develops. But if it's the old cycle, I would guess they already have the outline if not most of the details for the version after 2013 and may be thinking about ideas after that. Also, I would be very surprised if they did not want to be absolutely sure of their ground as far as Intellectual Property is concerned.

On the technical front, the biggest technical questions for me are "what can be done in the 'DO' part of the feature?" (i.e. the one you described a few messages back)

If it's "execution of an arbitrary macro", then it can do anything VBA can do, form "something sensible" to "accidentally trash every file on the system." It can also contain infinite loops, code that results in untrappable errors - at least not trappable by VBA - and doubtless other things I haven't even thought about that may result in dismay for the user.

As long as the user is willing to take responsibility for their part of the code, I don't see any technical showstoppers*.* But that doesn't mean that such problems won't turn up.

From a support perspective though, having a half-and-half feature like that is a bit of a liability, to say the least.

Going to a slightly more detailed level, when I read your earlier messages, I got the impression that you were keen to avoid the more techie stuff involving selections, ranges etc. The trouble is that if the user still has to write VBA, e.g. to find something then move a few words to the right or whatever, they still have to understand that stuff. What's more, in the general case some code will function in (say) a paragraph in the main body of the document, but fail in a footer (say). In other words, in many cases the user would need to understand even more about their code.

When I first read your question, I had a slightly different idea as to what you were driving at. To me, how you avoid dealing with "allowing any piece of VBA" is to try to identify a small but potent set of things the user might want to do (obviously reducing the generality obtainable in VBA) and allow them to do those things and nothing else. That's one of the reasons I suggested that a change to the recorder might be needed - you'd only be able to record the things that the feature is designed to allow. Then the feature takes responsibility for making all that stuff happen. How to do that technically is a detail, but perhaps specify that the DO macro only contains calls to a number of predefined subs/functions that have been designed to behave well within the overall structure of the feature. Or define a completely new, small, non-VBA language and some VBA to interpret it.

Finally, I know we have been taking about Word and VBA. But really, we're talking about providing a set of features for repetitive processing. The Web App version of Word doesn't have any of that stuff, and perhaps it is intended that it never will. But because it doesn't have VBA, it would I think benefit far more from a feature to let its users do something like "do this in every paragraph that begins with 'Jack Robinson'"

Was this answer helpful?

0 comments No comments

39 additional answers

Sort by: Newest
  1. Anonymous
    2013-02-19T19:29:53+00:00

    OK.  I probably made a mistake by even referencing the Macro Recorder - its involvement is a "red herring" to the real issue I was trying to raise, which is why can't the language allow a macro to be written very simply along the lines of the example I gave above, which is more or less as follows: 

    DO                [find <text>, then move from there to another point 8 characters to the right (or, as               other examples: move to the end of the same line of text; move down one line and to               the right 3 characters) and then make some change to the text at that location (such                as a word change; a font change; inserting a paragraph or a tab, etc], and then     LOOP                 (causing the macro to DO that same series of things over and over again}     UNTIL [a specified place in the document is reached (such as: the End of the Page; the End of the               Section; the End of the Document, etc.)], at which time the macro would Stopfurther execution.

    It just seems like making a macro accomplish the above ought to be as simple to do as using the 3 commands I've described with the specific conditions entered for each. 

    I do not understand why it should be necessary to include references to "ranges" and "counts" (and whatever else is required that I cannot now recall) just to be able to have the macro do the same sequence of things over and over UNTIL it reaches (for example) the End of the Document. 

    So, a BIG part of my question is that I'd like to know the "Why" behind why what I want to do cannot be done as simply as I think it should, as well as the "Why" behind why its apparently necessary to include in the macro all the additional things that apparently are required in a  macro to get it to do what I want done (such as requiring references to "ranges" and "counts", instead of allowing me to effectively just tell it to "Just keep doing that until you reach the End of the Document").

    FWIW, the occasions when this comes up almost always are times when I have a huge amount of repetitive information, either already in a table or to be formatted to become a table (such as when I want to insert a Tab to use as a delimiter so that I can later convert the information into a table).  Sometimes the info comes from scanned and OCR'd documents, sometimes it comes from internet research -- but it's always info that's repetitive in some manner that would allow it to be the subject of the sort of macro action I've described.

    Was this answer helpful?

    0 comments No comments
  2. Anonymous
    2013-02-19T07:42:57+00:00

    Macro recording is certainly not that great but there is a large amount of subtle complexity that must be dealt with in order to create macros that do exactly what you require. Unfortunately, there is often unexpected actions/content that hopelessly confuse a macro, especially a recorded one.

    The reason why the macro recording can't be made to do 'this' is because of the various ways that what you have described might also be interpreted. For instance, how exactly should the macro recorder understand that you want to:

    1. Create a loop simply by you doing it once
    2. Repeat the loop until something arbitrary happens
    3. Know to move 8 characters left (is it always 8 characters or just 8 characters because the next word was 8 characters long)
    4. Exclude the text change you are making from the next search

    Personally, I would recommend you do make the investment in learning macros - even if you only use them rarely enough to keep forgetting how. At the very least, they do allow you to make a boring repetitive job far more interesting. Although this may not save you time in a single document, it will save your sanity.

    Was this answer helpful?

    0 comments No comments
  3. Doug Robbins - MVP - Office Apps and Services 323.6K Reputation points MVP Volunteer Moderator
    2013-02-19T05:58:30+00:00

    The macro language can be made to work that way.  It is the macro recorder that does not have the capability of formulating the necessary construction.

    There is probably an infinite number of variations of what you describe as a "specific concept" and it is just not feasible for a macro recorder deal with them.

    Was this answer helpful?

    0 comments No comments