Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Programming / November 2005

Tip: Looking for answers? Try searching our database.

SetRange not working as expected?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
ShaunW - 28 Nov 2005 13:48 GMT
Hi,
 I am currently trying to write a VBA macro (Word 2003) that syntax checks
a document.  I need to check that a style contains only the following text:

Requirement: aaa_bbb_123, aaa_bbb_123, aaa_bbb_123, aaa_bbb_123,

There is no limit on the number of comma seperated items within the
paragraph, but each item must be in this form.

So I wrote the following code extract which attempts to use ranges to select
a single requirement "aaa_bbb_123," and then reduce the overall (refRng)
range by the currently processed requirement (singleref):

               Dim refRng As Range
               Dim singleReq As String
               Dim singleref As Range

               colonIn = InStr(aParagraph, ":")

               'Set refrng to be the paragrph minus the text Requiremnet:
and minus the carriage return at the end
               Set refRng = mySTS.Range(Start:=aParagraph.Range.Start +
colonIn, _
                                        End:=aParagraph.Range.End - 1)

               While (InStr(refRng, ","))
                   'extract text upto comma
                   Set singleref = mySTS.Range(Start:=refRng.Start, _
                                               End:=refRng.Start +
InStr(refRng, ","))
                   singleref.Select
                   
                   'match string to pattern
                   If Trim(singleref.Text) Like "?*_?*_?*," Then
                   Else
                       mySTS.Comments.Add Range:=singleref,
Text:="SyntaxChecker: Not Matched" & singleref.Text
                   End If
               
                   refRng.SetRange Start:=singleref.End, _
                                   End:=refRng.End
                       
               Wend
               

However, when I attempt to parse the paragraph:
Reference: VE900_ISUP_090, VE900_ISUP_091, VE900_ISUP_092, VE900_ISUP_093,
,VE900_ISUP_094,VE900_ISUP_095, VE900_ISUP096, VE900_ISUP_097

The code gets stuck in an infinate loop due to the text "093,
,VE900_ISUP_094,VE900_ISUP_095, VE900_ISUP096, VE900_ISUP_097"
For each iteration of the loop, the refRng.Start value incriments, but the
value of the refRng.Text remains the same making the value of singleref
always "".

I don't understand why the textual value of the refRng.Text does not shrink
by one character for each iteration of the loop.

Is this just some bad code (which is highly likely) caused by my lack of
understanding of the setrange method, or is there something more untoward
going on?

Any help greatly appreciated as I am fairly new to VBA.
Cheers,
Shaun
Jay Freedman - 28 Nov 2005 16:26 GMT
Hi Shaun,

I'm not going to try to analyze the problem you ran into, because there's a
simpler way to approach the problem: Read the paragraph's text into a string
variable, use the Split function to separate it into substrings delimited by
commas, and check each substring for syntax. If a substring fails the check,
find that substring in the paragraph and attach a comment to it. Here's
sample code:

Sub CheckSyntax()
  Dim aParaRg As Range
  Dim WorkStr As String
  Dim WorkAry As Variant
  Dim colonIn As Long, ind As Long
  Dim oRg As Range

  Set aParaRg = ActiveDocument.Paragraphs(1).Range
  ' or however you identify the paragraph to check...

  WorkStr = aParaRg.Text

  colonIn = InStr(WorkStr, ":")
  If colonIn > 0 Then
     ' remove everything up to the colon
     WorkStr = Mid$(WorkStr, colonIn + 1)
  End If

  ' chop the string into comma-delimited substrings
  WorkAry = Split(WorkStr, ",")

  ' check the substrings
  For ind = 0 To UBound(WorkAry)
     WorkStr = Trim(WorkAry(ind))
     If Not (WorkStr Like "?*_?*_?*") Then
        Set oRg = aParaRg.Duplicate
        With oRg.Find
           .Text = WorkStr
           .Format = False
           .Forward = True
           .Wrap = wdFindStop
           If .Execute Then
              ActiveDocument.Comments.Add Range:=oRg, _
                 Text:="SyntaxChecker: Not Matched " & _
                 WorkStr
           End If
        End With
     End If
  Next ind
End Sub

Signature

Regards,
Jay Freedman
Microsoft Word MVP          FAQ: http://word.mvps.org

> Hi,
>   I am currently trying to write a VBA macro (Word 2003) that syntax
[quoted text clipped - 64 lines]
> Cheers,
> Shaun
ShaunW - 28 Nov 2005 17:31 GMT
Thanks Jay,
 Your solution provides me with a working solution to my problem.  That
allows me to complete my task.  I will endeavour to try and workout why my
setrange does not seem to work as I expect.

If anyone can answer this specifically, please feel free to post.

Thanks,
 Shaun

> Hi Shaun,
>
[quoted text clipped - 114 lines]
> > Cheers,
> > Shaun
Helmut Weber - 28 Nov 2005 16:47 GMT
Hi Shaun,

I don't know where the problem is in your code.
Can't paste it in the VBA-Editor.
Don't have sufficient reliable testing material.

Do you want:
1) the text to be in the right syntax,
or do you want to know,
2) where it isn't in the right syntax?

For 1)
I'd make the text absolutely consistent first,
example, as far the commas are concerned:
Replace every comma with comma plus space.
Replace every comma followed by more than one space
with comma plus space.
Insert a comma before the paragraph mark.

Then You got:
Reference: some text, some text, some text,¶

Then You need a grammar for strings like " VE900_ISUP_090,"
which seems to be:
Space, 2 capital letters, three digits, underscore,
4 capital letters, underscore, 3 digits, comma

all repeating from "reference:" to a paragraphs end.

Signature

Greetings from Bavaria, Germany

Helmut Weber, MVP WordVBA

Win XP, Office 2003
"red.sys" & Chr$(64) & "t-online.de"

ShaunW - 28 Nov 2005 17:35 GMT
Thanks Helmut,
Jay has already provided me with a solution to the problem.
Regards,
Shaun

> Hi Shaun,
>
[quoted text clipped - 24 lines]
>
> all repeating from "reference:" to a paragraphs end.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.