![]() |
|
|
| Subject:
visual basic question, probably easy
Category: Computers Asked by: mrbandrews-ga List Price: $4.00 |
Posted:
08 Nov 2005 10:48 PST
Expires: 08 Dec 2005 10:48 PST Question ID: 590604 |
Hi, I am re-familiarizing myself with VB after several years. I am
trying to just open a Word document, search it, and replace text with
other text.
The following code does not work. The search & replace execution does
not find the text "foo". The message box pops up "False." How come?
thanks...
Dim oWord As Word.Application
Dim oDoc As Word.Document
oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add("C:\program\test.doc")
oDoc.Range.Select()
oDoc.Range.Text = "foo foo foo"
oDoc.Range.Find.ClearFormatting()
oDoc.Range.Find.Replacement.ClearFormatting()
With oDoc.Range.Find
.Text = "foo"
.Replacement.Text = "bar"
.Forward = True
.Wrap = Word.WdFindWrap.wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
oDoc.Range.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)
MsgBox(oDoc.Range.Find.Found)
oDoc.SaveAs("C:\program\test2.doc") |
|
| There is no answer at this time. |
|
| Subject:
Re: visual basic question, probably easy
From: nejla-ga on 09 Nov 2005 12:46 PST |
Hi mrbandrews,
This is your code with few modifications. It works fine with no error:
Dim oWord As Word.Application
Dim oDoc As Word.Document
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
Set oDoc = oWord.Documents.Add("C:\program\test.doc")
Call oDoc.Range.Select
oDoc.Range.Text = "foo foo foo"
Call oDoc.Range.Find.ClearFormatting
Call oDoc.Range.Find.Replacement.ClearFormatting
While oDoc.Range.Find.Execute("Foo", , , , , , , , , "Bar")
Call oDoc.Range.Find.ClearFormatting
Wend
oDoc.SaveAs ("C:\program\test2.doc")
Wish you success
Nejla |
| Subject:
Re: visual basic question, probably easy
From: manuka-ga on 09 Nov 2005 17:42 PST |
This actually turned out to be quite interesting.
If you step through your code with the debugger, and have a watch set
on oDoc.Range.Find, you'll notice that the values don't change - even
though, if you move the Execute statement into with With block, the
replacement operation actually succeeds!
The reason is that each separate invocation of oDoc.Range.Find looks
at a diferent Find object. (This makes sense, since it would be
mind-bogglingly inefficient to have a Find object defined for every
possible range in your document.) So the Execute line in your code is
being applied to a different Find object than the one you set all your
fields in, so it's just doing a default search for nothing. Similarly,
when you check the Found field you're doing it on a freshly-minted
Find object, so you're just getting the default value.
You need to declare a separate Find object:
Dim oFind as Find
[...]
Set oFind = oDoc.Range.Find
And then replace each instance of oDoc.Range.Find with oFind.
I tend to agree with nejla, though; it's easier to make one call to
Execute and specify all your arguments in the function call - though
nejla was a bit lazy and skipped some of the things you specified.
Also, there's no need for a While/Wend loop (as nejla used), just use
the Replace argument to specify a Replace All. In general it's best to
be careful and specify all the arguments you need, because some
arguments are carried over from the last Find operation if you don't
specify them.
If you're happy to do without named arguments in function calls, this
can replace your whole With block and Execute statement:
oFind.Execute "foo", False, False, False, False, False, _
True, wdFindContinue, False, "bar", wdReplaceAll
If you want named arguments, I'd do it much as you did (though with
oFind instead of oDoc.Range.Find, as discussed), except that I'd put
the Execute statement into the With block as well. There's no reason
to leave it outside. |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
| Search Google Answers for |
| Google Home - Answers FAQ - Terms of Service - Privacy Policy |