Tery,
Glad you got it working.
Although, it seems curious that in your code you are changing the first
instance of the word 'running' to a '}' character?
And it looks like you didn't want to move the found text to the very
beginning of the document, but maybe after the first paragraph along with a
couple of empty paragraphs, afterwards, for spacing?
That is easily tweaked by using these changes:
'========================
Sub Move_Running_To_Top()
Dim aRange As Word.Range
Set aRange = ActiveDocument.Content
With aRange.Find
.Text = "Device[!^13]@running*\nend[^13 ]{1,}" 'space character included
.MatchWildcards = True
While .Execute
ActiveDocument.Paragraphs(1).Range.InsertAfter aRange.Text _
& vbCr & vbCr
aRange.Delete
Wend
End With
End Sub
'========================
To insert found text in the same order that it was found, I made this
adjustment:
'========================
Sub Move_Running_To_Top2()
Dim aRange As Word.Range
Dim aRange2 As Word.Range
Set aRange = ActiveDocument.Content
Set aRange2 = ActiveDocument.Paragraphs(1).Range
With aRange.Find
.Text = "Device[!^13]@running*\nend[^13 ]{1,}" 'space character included
.MatchWildcards = True
While .Execute
aRange2.InsertAfter aRange.Text & vbCr & vbCr
aRange2.Collapse direction:=wdCollapseEnd
aRange.Delete
Wend
End With
End Sub
'========================
I try to use the Range object, rather than the Selection object for speed.
So my code automatically moves everything to the top. Did you want to
**manually** select only certain devices that are running to move to the
top?
P.S.
I unintentionally left a \n in my original code posting because in MacWord I
have to use that instead of any ^13. So if it causes no problems in WinWord,
then ignore it, otherwise change the \n to a ^13 in the wildcard search
strings.
Russ this worked pretty well, but I had to change a few things and once I
did, it worked great. So here how I modified it so that I could get it to do
exactly what I wanted.
Sub Move_Running_To_Top()
Dim aRange As Word.Range
Dim aRange2 As Word.Range
'Set aRange = ActiveDocument.Content
'Set aRange2 = ActiveDocument.Range(0, 0)
Selection.find.ClearFormatting
With Selection.find
.text = "running"
.Replacement.text = "}"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.find.Execute
Selection.homekey Unit:=wdLine
With Selection.find
.MatchWildcards = True
.text = "Device[!^13]@running*\nend[^13 ]{1,}" 'space character included
While .Execute
Selection.Cut
Selection.homekey Unit:=wdStory
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.Paste
Wend
End With
Selection.InsertAfter Chr(13)
Selection.InsertAfter Chr(13)
End Sub
I am now looking to do something else. I will start a new thread to work on
that one after, I look up to see if someone has talked about it.
Russ said:
Harddrive747,
I looked at your example and if the pattern holds true, I thought you could
search using these wildcards:
Sub Move_Running_To_Top()
Dim aRange As Word.Range
Set aRange = ActiveDocument.Content
With aRange.Find
.Text = "Device[!^13]@running*\nend[^13 ]{1,}" 'space character included
.MatchWildcards = True
While .Execute
ActiveDocument.Range(0, 0).InsertAfter aRange.Text
aRange.Delete
Wend
End With
End Sub
'========================
To insert found text in the same order that it was found, I made this
adjustment:
Sub Move_Running_To_Top2()
Dim aRange As Word.Range
Dim aRange2 As Word.Range
Set aRange = ActiveDocument.Content
Set aRange2 = ActiveDocument.Range(0, 0)
With aRange.Find
.Text = "Device[!^13]@running*\nend[^13 ]{1,}" 'space character included
.MatchWildcards = True
While .Execute
aRange2.InsertAfter aRange.Text
aRange2.Collapse direction:=wdCollapseEnd
aRange.Delete
Wend
End With
End Sub
Here is a short section of the text. The "....." indicates more text
inbetween.
Device :: <router name> Command :: show running-config
Building configuration...
Current configuration : 17356 bytes
!
.
.
.
end
Device :: <router name> Command :: show standby
:
Could you post a bit of the text that contains the two words so I can try
to
find out what is causing the code to work differently on your system then
on
mine?
:
No this does not happen on my system. I am using Word 2003 and when I run
the program it just doesn't do anything.
The code that I was able to get it to do what I want, but I don't know how
to get to to stop is
Do
Selection.MoveDown unit:=wdLine, Extend:=wdExtend
Loop
this will select the text, but I can't figure out how to get the loop to
break at the part that I need it to. I have tried selection.find and it
will
find the word, but then it unselects everything that I have selected. I
need
to break this loop. I am thinking of trying to count the lines between
the
two, but I'm not sure to get it to count, because where do I tell it to
stop.
it's almost like i need to be able to read the charcters and if it matches
a
certain string then break the loop. I will continue to check on it.
:
I have text files that have router information in them. I need to move a
section of text from the middle of the file to the top.
Here is what I manually do. I find the text of "running." I then press
the
home key to get it to the left. I then want to selection (Highlight) the
text to the next iteration of "Device," but I don't want the device
involved.
The finding part is simple and the other parts of cutting and moving it
to
the top of the document is straight forward. What I'm having issue with
is
getting the highlighting done. The number of lines between for the
section
will vary from file to file. So I need to be able to select until I find
the
word "device" comes up again.
I will include the section of code that I'm trying to do this with:
Selection.MoveDown unit:=wdLine, Count:=597, Extend:=wdExtend
With ActiveDocument.Content.Find
Selection.MoveDown unit:=wdLine, Extend:=wdExtend
.Execute findtext:="Device", Forward:=True
End With
I tried the stuff in the help files and they work to an extent, but not
fully. So any help would be greatly appreachated.
Tery