View Single Post
  #6   Report Post  
Posted to microsoft.public.word.docmanagement
RPMitchal RPMitchal is offline
external usenet poster
 
Posts: 135
Default Looping Macro for Selection String Between Quotation Marks

Hello Again Jay:

I have, in the interim, been studying and researching the code that you
supplied. I found that up to a point it is headed in the correct direction €“
and for that I thank you.

I ran the code and the below is an example of the result.

(€śJay Freeman€ť)
in Doc1 - presented me with

"J¶
")¶
in Doc2

It would appear that instead of selecting the first quotation mark and
extending the selection to the next occurrence of a quotation mark, I am
being presented with the quotation mark and only the next following
character.

In *Stepping Through* the coding, it would appear (to my limited knowledge)
that the below block of coding may contain the culprit in this regard.

' oRg1 points to starting quote
' extend it to include the ending quote
oRg1.MoveEndUntil Cset:="""", Count:=wdForward
oRg1.MoveEnd Unit:=wdCharacter, Count:=1

I would certainly appreciate you taking another look at the above coding in
hopes of shedding further light on this situation.

Thanks Again €“ Rod



"Jay Freedman" wrote:

Hi Rod,

It's a convention (that is, something useful but not required). A Range is
an "object" (a programming structure that contains many values, as opposed
to a simple variable with a single value). VBA requires the use of the Set
keyword when you assign any object, as in "Set oRg1 = Doc1.Content". I find
it helpful to use the "o" prefix for objects as a reminder to include the
Set. But I don't always use it consistently; in this case I didn't name the
documents oDoc1 and oDoc2 even though they're objects too.

This is a single example of something called "Hungarian notation" (see
http://en.wikipedia.org/wiki/Hungarian_notation). There are various opinions
about how useful that notation is.

-- Jay

RPMitchal wrote:
Jay:

Just a quick further question in this regard. What is meant by or
what is the purpose of using the "o" within the coding that you've
supplied? For example:

Dim "o"Rg1 As Range, "o"Rg2 as Range

I've seen it before but have been unable to find any reference to
it's use among the several manuals that I have reviewed.

Thanks Again - Rod


"Jay Freedman" wrote:

Hi Rod,

Unfortunately, this is one of those situations where the macro
recorder leads you badly astray. Because it can only use the
Selection object (corresponding to the physical cursor in the
document), it has to do the Activate to jump from document to
document. In the process, it tends to lose track of what properties
are set for the Find. Complicating that, you've put the Do While
statement in the wrong place, so the Find is only done once.

Here's a version that works. The document that receives the copies
of the quoted text is a new blank one created by the Documents.Add
statement; that can be changed if necessary.

Sub demo()
Dim Doc1 As Document, Doc2 As Document
Dim oRg1 As Range, oRg2 As Range

Set Doc1 = ActiveDocument
Set Doc2 = Documents.Add

Set oRg1 = Doc1.Content

With oRg1.Find
.Text = """"
.Forward = True
.Format = False
.Wrap = wdFindStop
Do While .Execute
' oRg1 points to starting quote
' extend it to include the ending quote
oRg1.MoveEndUntil Cset:="""", Count:=wdForward
oRg1.MoveEnd Unit:=wdCharacter, Count:=1

' point oRg2 to the end of Doc2
Set oRg2 = Doc2.Content
oRg2.Collapse Direction:=wdCollapseEnd

' "copy" without using clipboard
oRg2.FormattedText = oRg1.FormattedText

' add a paragraph mark at the end
oRg2.Collapse Direction:=wdCollapseEnd
oRg2.Text = vbCr

' prepare to find next pair of quotes
oRg1.Collapse Direction:=wdCollapseEnd
Loop
End With
End Sub


--
Regards,
Jay Freedman
Microsoft Word MVP FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the
newsgroup so all may benefit.

On Mon, 4 Aug 2008 13:46:43 -0700, RPMitchal
wrote:

Word 2003

I have attempted to put together the below looping macro which
essentially searches for a word or words surrounded by quotation
marks in Document (2),

selects everything between and including the opening and closing
quotation marks by using the "Extend" feature (F8);

copies the selected string and pastes it at the cursor position in
Document (1);

inserts a paragraph return; and

then switches back to Document (2), advances past the highlighted
selection and repeats the same functions until reaching the end of
the document.

The macro seems to work just fine until such time as I insert the
"Do While" and the "Loop" commands in an attempt to get the macro
to repeat itself until reaching the end of the document.

Obviously, I am missing at the very least - one step - and would
very much appreciate any assistance or insight into what I am doing
incorrectly. If the below macro is completely off the mark, I
would appreciate being furnished with the coding for a macro that
actually would work and how me the errors of my ways.

Thanks - Rod

Sub Definition()
'
' Definition Macro
' Macro recorded 7/31/2008 by Rod
'
Selection.Find.ClearFormatting
With Selection.Find
.Text = """"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Extend
Selection.Find.ClearFormatting
With Selection.Find
.Text = """"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Do While Selection.Find.Execute
Selection.Copy
Windows(1).Activate
Selection.PasteAndFormat (wdPasteDefault)
Selection.TypeParagraph
Windows(2).Activate
Selection.MoveRight Unit:=wdWord, Count:=1
Loop

End Sub