Can someone tell me what is wrong with this code? What I am trying to do, is
set a range to the first 5 sections of a document. Then I want to find a
particular string. If I find it, I want to clear that search and search for
something different. However, the search is not working (at all). It is
not finding the string that is actually in the document. (I tried changing
noticeplus.find to selection.find, which appeared to work. But as I got
deeper into the macro, I found that it was not doing what I wanted (It wasn't
just searching the range that I set, it was searching the entire document).
I know I have done this before and I know it is going to be something simple
and stupid, but it just has me stumped at the moment. Thanks for any help.

Dim noticeplus as range
Selection.HomeKey Unit:=wdStory
Set noticeplus =
ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
End:=ActiveDocument.Sections(5).Range.End)
With noticeplus.Find
.ClearFormatting
.Text = "Electronic"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With


If noticeplus.Find.Execute("Electronic") = True Then
Selection.Collapse 1

Selection.HomeKey Unit:=wdStory

Set noticeplus =
ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
End:=ActiveDocument.Sections(5).Range.End)

With noticeplus.Find
.ClearFormatting
.Text = "in accordance with your contract"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
'Expert if
If noticeplus.Find.Execute = True Then
Selection.Collapse 1
Selection.HomeKey Unit:=wdStory

Re: searching a range by Greg

Greg
Sun Sep 09 16:22:21 CDT 2007

I suppose I would use something like this:

Sub Test()
Dim noticeplus As Range
Dim oRng As Word.Range
Dim bFound As Boolean
Selection.HomeKey Unit:=wdStory
bFound = False
Set noticeplus = ActiveDocument.Range(Start:=0,
End:=ActiveDocument.Sections(5).Range.End)
Set oRng = noticeplus.Duplicate
With noticeplus.Find
.ClearFormatting
.Text = "Electronic"
.Forward = True
.Wrap = wdFindStop
.Execute
If .Found = True Then
bFound = True
End If
End With
If bFound Then
With oRng.Find
.Text = "in accordance with your contract"
.Forward = True
.Wrap = wdFindStop
.Execute
If .Found = True Then
'What do you want to do with this found text???
Selection.Collapse 1
Selection.HomeKey Unit:=wdStory
End If
End With
End If
End Sub


--
Greg Maxey/Word MVP
See:
http://gregmaxey.mvps.org/word_tips.htm
For some helpful tips using Word.

"Elaine J." <ElaineJ@discussions.microsoft.com> wrote in message
news:2367F892-5B23-4CB6-A8AF-3863DA14BC10@microsoft.com...
> Can someone tell me what is wrong with this code? What I am trying to do,
> is
> set a range to the first 5 sections of a document. Then I want to find a
> particular string. If I find it, I want to clear that search and search
> for
> something different. However, the search is not working (at all). It is
> not finding the string that is actually in the document. (I tried
> changing
> noticeplus.find to selection.find, which appeared to work. But as I got
> deeper into the macro, I found that it was not doing what I wanted (It
> wasn't
> just searching the range that I set, it was searching the entire
> document).
> I know I have done this before and I know it is going to be something
> simple
> and stupid, but it just has me stumped at the moment. Thanks for any
> help.
>
> Dim noticeplus as range
> Selection.HomeKey Unit:=wdStory
> Set noticeplus =
> ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
> End:=ActiveDocument.Sections(5).Range.End)
> With noticeplus.Find
> .ClearFormatting
> .Text = "Electronic"
> .Replacement.Text = ""
> .Forward = True
> .Wrap = wdFindStop
> End With
>
>
> If noticeplus.Find.Execute("Electronic") = True Then
> Selection.Collapse 1
>
> Selection.HomeKey Unit:=wdStory
>
> Set noticeplus =
> ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
> End:=ActiveDocument.Sections(5).Range.End)
>
> With noticeplus.Find
> .ClearFormatting
> .Text = "in accordance with your contract"
> .Replacement.Text = ""
> .Forward = True
> .Wrap = wdFindStop
> End With
> 'Expert if
> If noticeplus.Find.Execute = True Then
> Selection.Collapse 1
> Selection.HomeKey Unit:=wdStory
>



Re: searching a range by ElaineJ

ElaineJ
Sun Sep 09 17:26:02 CDT 2007

Greg, thanks for your response. I think I am following most of that, but I
do have a question. What exactly is the the statement "Set oRng =
noticeplus.Duplicate" doing? It is creating an actual duplicate? What I am
trying to do is a little convulated (or at least I think it is).

I have a document that is comprised of many notices (with sections). Each
of the notices are three sections long, but some may be four and some five
sections long. It depends on language that is unique to each section.

So I am setting the range for 5 sections. If I find the language I am
looking for in section 5 -- that tells me something in particular. (and I
need to know that first). If I do find the language for section 5, then I
need to search to see if I find the langauge that would be in section 4.

If I find the right language in section 5, AND section 4, then I need to
delete section 4 and change my range to sections 1 to 4 (Sections 1-3 plus
section 5 that is now section 4)

After I determine the range, I will then print and delete that. Then I will
go through the same procedure for the next notice in the document.

By the way, if I don't find the language I am looking for in section 5, I
would immediately change my range to sections 1-4 -- and then if I don't find
the language in section 4 I would change it again to sections 1-3

I actually have most of it figured out, but for some reason the searching
within the range, is what has me stumped.

I'm saying all that to say that I need to be working in my orignal document.
I am not where I can test this until tomorrow, but I guess my original
question is pretty much what I need to know for right now. (And if you have
any other suggestions after reading this). I thought once I set a range, I
could just search it and do what I wanted to with it. It's turning out to be
more complicated than I thought.

Thanks again for your help.





"Greg Maxey" wrote:

> I suppose I would use something like this:
>
> Sub Test()
> Dim noticeplus As Range
> Dim oRng As Word.Range
> Dim bFound As Boolean
> Selection.HomeKey Unit:=wdStory
> bFound = False
> Set noticeplus = ActiveDocument.Range(Start:=0,
> End:=ActiveDocument.Sections(5).Range.End)
> Set oRng = noticeplus.Duplicate
> With noticeplus.Find
> .ClearFormatting
> .Text = "Electronic"
> .Forward = True
> .Wrap = wdFindStop
> .Execute
> If .Found = True Then
> bFound = True
> End If
> End With
> If bFound Then
> With oRng.Find
> .Text = "in accordance with your contract"
> .Forward = True
> .Wrap = wdFindStop
> .Execute
> If .Found = True Then
> 'What do you want to do with this found text???
> Selection.Collapse 1
> Selection.HomeKey Unit:=wdStory
> End If
> End With
> End If
> End Sub
>
>
> --
> Greg Maxey/Word MVP
> See:
> http://gregmaxey.mvps.org/word_tips.htm
> For some helpful tips using Word.
>
> "Elaine J." <ElaineJ@discussions.microsoft.com> wrote in message
> news:2367F892-5B23-4CB6-A8AF-3863DA14BC10@microsoft.com...
> > Can someone tell me what is wrong with this code? What I am trying to do,
> > is
> > set a range to the first 5 sections of a document. Then I want to find a
> > particular string. If I find it, I want to clear that search and search
> > for
> > something different. However, the search is not working (at all). It is
> > not finding the string that is actually in the document. (I tried
> > changing
> > noticeplus.find to selection.find, which appeared to work. But as I got
> > deeper into the macro, I found that it was not doing what I wanted (It
> > wasn't
> > just searching the range that I set, it was searching the entire
> > document).
> > I know I have done this before and I know it is going to be something
> > simple
> > and stupid, but it just has me stumped at the moment. Thanks for any
> > help.
> >
> > Dim noticeplus as range
> > Selection.HomeKey Unit:=wdStory
> > Set noticeplus =
> > ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
> > End:=ActiveDocument.Sections(5).Range.End)
> > With noticeplus.Find
> > .ClearFormatting
> > .Text = "Electronic"
> > .Replacement.Text = ""
> > .Forward = True
> > .Wrap = wdFindStop
> > End With
> >
> >
> > If noticeplus.Find.Execute("Electronic") = True Then
> > Selection.Collapse 1
> >
> > Selection.HomeKey Unit:=wdStory
> >
> > Set noticeplus =
> > ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
> > End:=ActiveDocument.Sections(5).Range.End)
> >
> > With noticeplus.Find
> > .ClearFormatting
> > .Text = "in accordance with your contract"
> > .Replacement.Text = ""
> > .Forward = True
> > .Wrap = wdFindStop
> > End With
> > 'Expert if
> > If noticeplus.Find.Execute = True Then
> > Selection.Collapse 1
> > Selection.HomeKey Unit:=wdStory
> >
>
>
>

Re: searching a range by Greg

Greg
Sun Sep 09 20:20:37 CDT 2007

Elaine,

Yes .Duplicate is just a exact copy of the specified range. You could just
as easily use:

Dim oRng1 as Word.Range
Dim oRng2 as Word.Range
Set oRng1 = ActiveDocument.range
Set oRng2 = ActiveDocument.range



--
Greg Maxey/Word MVP
See:
http://gregmaxey.mvps.org/word_tips.htm
For some helpful tips using Word.


Elaine J. wrote:
> Greg, thanks for your response. I think I am following most of that,
> but I do have a question. What exactly is the the statement "Set
> oRng = noticeplus.Duplicate" doing? It is creating an actual
> duplicate? What I am trying to do is a little convulated (or at
> least I think it is).
>
> I have a document that is comprised of many notices (with sections).
> Each of the notices are three sections long, but some may be four and
> some five sections long. It depends on language that is unique to
> each section.
>
> So I am setting the range for 5 sections. If I find the language I am
> looking for in section 5 -- that tells me something in particular.
> (and I need to know that first). If I do find the language for
> section 5, then I need to search to see if I find the langauge that
> would be in section 4.
>
> If I find the right language in section 5, AND section 4, then I need
> to delete section 4 and change my range to sections 1 to 4 (Sections
> 1-3 plus section 5 that is now section 4)
>
> After I determine the range, I will then print and delete that. Then
> I will go through the same procedure for the next notice in the
> document.
>
> By the way, if I don't find the language I am looking for in section
> 5, I would immediately change my range to sections 1-4 -- and then if
> I don't find the language in section 4 I would change it again to
> sections 1-3
>
> I actually have most of it figured out, but for some reason the
> searching within the range, is what has me stumped.
>
> I'm saying all that to say that I need to be working in my orignal
> document. I am not where I can test this until tomorrow, but I guess
> my original question is pretty much what I need to know for right
> now. (And if you have any other suggestions after reading this). I
> thought once I set a range, I could just search it and do what I
> wanted to with it. It's turning out to be more complicated than I
> thought.
>
> Thanks again for your help.
>
>
>
>
>
> "Greg Maxey" wrote:
>
>> I suppose I would use something like this:
>>
>> Sub Test()
>> Dim noticeplus As Range
>> Dim oRng As Word.Range
>> Dim bFound As Boolean
>> Selection.HomeKey Unit:=wdStory
>> bFound = False
>> Set noticeplus = ActiveDocument.Range(Start:=0,
>> End:=ActiveDocument.Sections(5).Range.End)
>> Set oRng = noticeplus.Duplicate
>> With noticeplus.Find
>> .ClearFormatting
>> .Text = "Electronic"
>> .Forward = True
>> .Wrap = wdFindStop
>> .Execute
>> If .Found = True Then
>> bFound = True
>> End If
>> End With
>> If bFound Then
>> With oRng.Find
>> .Text = "in accordance with your contract"
>> .Forward = True
>> .Wrap = wdFindStop
>> .Execute
>> If .Found = True Then
>> 'What do you want to do with this found text???
>> Selection.Collapse 1
>> Selection.HomeKey Unit:=wdStory
>> End If
>> End With
>> End If
>> End Sub
>>
>>
>> --
>> Greg Maxey/Word MVP
>> See:
>> http://gregmaxey.mvps.org/word_tips.htm
>> For some helpful tips using Word.
>>
>> "Elaine J." <ElaineJ@discussions.microsoft.com> wrote in message
>> news:2367F892-5B23-4CB6-A8AF-3863DA14BC10@microsoft.com...
>>> Can someone tell me what is wrong with this code? What I am trying
>>> to do, is
>>> set a range to the first 5 sections of a document. Then I want to
>>> find a particular string. If I find it, I want to clear that
>>> search and search for
>>> something different. However, the search is not working (at
>>> all). It is not finding the string that is actually in the
>>> document. (I tried changing
>>> noticeplus.find to selection.find, which appeared to work. But as
>>> I got deeper into the macro, I found that it was not doing what I
>>> wanted (It wasn't
>>> just searching the range that I set, it was searching the entire
>>> document).
>>> I know I have done this before and I know it is going to be
>>> something simple
>>> and stupid, but it just has me stumped at the moment. Thanks for
>>> any help.
>>>
>>> Dim noticeplus as range
>>> Selection.HomeKey Unit:=wdStory
>>> Set noticeplus =
>>> ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
>>> End:=ActiveDocument.Sections(5).Range.End)
>>> With noticeplus.Find
>>> .ClearFormatting
>>> .Text = "Electronic"
>>> .Replacement.Text = ""
>>> .Forward = True
>>> .Wrap = wdFindStop
>>> End With
>>>
>>>
>>> If noticeplus.Find.Execute("Electronic") = True Then
>>> Selection.Collapse 1
>>>
>>> Selection.HomeKey Unit:=wdStory
>>>
>>> Set noticeplus =
>>> ActiveDocument.Range(Start:=ActiveDocument.Sections(1).Range.Start,
>>> End:=ActiveDocument.Sections(5).Range.End)
>>>
>>> With noticeplus.Find
>>> .ClearFormatting
>>> .Text = "in accordance with your contract"
>>> .Replacement.Text = ""
>>> .Forward = True
>>> .Wrap = wdFindStop
>>> End With
>>> 'Expert if
>>> If noticeplus.Find.Execute = True Then
>>> Selection.Collapse 1
>>> Selection.HomeKey Unit:=wdStory