View Single Post
  #27   Report Post  
Posted to microsoft.public.word.docmanagement
Graham Mayor Graham Mayor is offline
external usenet poster
 
Posts: 19,312
Default Creating a Macro

We'll get this right yet
Which line is highlighted when you get the error?
Did you by any chance leave the extra End Sub line in place when you pasted
the code into your macro?
There is a broken line attributable to the e-mail editor line length. Paste
the foillowing in place of yoir original macro and try again. It works fine
here.

Sub ReplaceList()
Dim vFindText As Variant
Dim vReplText As Variant
Dim i As Long
vFindText = Array("(upper right) ([0-9]{1,})", _
"(bottom right) ([0-9]{1,})", "upper left ", _
"upper right", "bottom left ", "bottom right ")
vReplText = Array("\2\1", "\2\1", ChrW(9496), _
ChrW(9492), ChrW(9488), ChrW(9484))
With Selection
.HomeKey wdStory
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.Format = True
.MatchCase = False
For i = LBound(vFindText) To UBound(vFindText)
.Text = vFindText(i)
.Replacement.Text = vReplText(i)
.Replacement.Font.name = "Arial"
Select Case i
Case 2
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 3
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 4
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case 5
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case Else
End Select
.Execute Replace:=wdReplaceAll
Next i
End With
End With
End Sub

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org




lewisma wrote:
I'm really sorry, i keep getting a compile error when i try to run
this.

Compile error: Invalid outside procedure

The Macro is listed below.

Dim vFindText As Variant
Dim vReplText As Variant
Dim i As Long
vFindText = Array("(upper right) ([0-9]{1,})", _
"(bottom right) ([0-9]{1,})", "upper left ", _
"upper right", "bottom left ", "bottom right ")
vReplText = Array("\2\1", "\2\1", ChrW(9496), ChrW(9492), ChrW(9488),
ChrW(9484))
With Selection
.HomeKey wdStory
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.Format = True
.MatchCase = False
For i = LBound(vFindText) To UBound(vFindText)
.Text = vFindText(i)
.Replacement.Text = vReplText(i)
.Replacement.Font.Name = "Arial"
Select Case i
Case 2
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 3
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 4
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case 5
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case Else
End Select
.Execute Replace:=wdReplaceAll
Next i
End With
End With
End Sub

Not sure what i'm doing wrong here.

Your picky dentist isn't paying me for my time to keep recreating
this code, because he keeps changing his mind! How much of his
expertise does he/she offer for free?

This took a bit of head scratching and some abortive attempts to do
it more simply, but it requires modifications to large sections of
the code

As you want the numbers transposed, the simplest way is to do that
first. I have assumed that all the 'uppers' and 'bottoms' are in
lower case as wildcard searches are case sensitive.

I do not know what you did with the + sign so I have omitted it. Be
careful of the array order, and the consequent case statement
numbering if you add extra search sequences.

I have broken the Findtext array into three lines to avoid problems
with the e-mail system

I have changed the font size for the symbols to 16 and moved the
font sizing to the case statements.

There are no spaces between the symbols and the numbers. The spacing
is attributable to the internal spacing in the font. Short of
creating your own font (which is possible, but time consuming) there
is nothing you can do about the spacing between the numbers and the
symbols.

Note that the Case statements refer to the order of the items in the
array starting with 0.

Dim vFindText As Variant
Dim vReplText As Variant
Dim i As Long
vFindText = Array("(upper right) ([0-9]{1,})", _
"(bottom right) ([0-9]{1,})", "upper left ", _
"upper right", "bottom left ", "bottom right ")
vReplText = Array("\2\1", "\2\1", ChrW(9496), ChrW(9492), ChrW(9488),
ChrW(9484))
With Selection
.HomeKey wdStory
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.Format = True
.MatchCase = False
For i = LBound(vFindText) To UBound(vFindText)
.Text = vFindText(i)
.Replacement.Text = vReplText(i)
.Replacement.Font.name = "Arial"
Select Case i
Case 2
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 3
.Replacement.Font.Size = 16
.Replacement.Font.Position = -4
Case 4
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case 5
.Replacement.Font.Size = 16
.Replacement.Font.Position = 4
Case Else
End Select
.Execute Replace:=wdReplaceAll
Next i
End With
End With
End Sub


lewisma wrote:
I am really sorry to be a nuisance, the person that requires this is
a little picky, i did work out the i can make the symbols slightly
bigger by increasing the font size.
So for now what i need to do is the first option which is to move
the symbol to the right of the number, this is only needed for
upper/lower right.

Extract ?5 (upper right) needs to be 5 then the symbol

Extract ?5 (lower right) needs to be 5 then the symbol

If possible no spaces between the number and the symbol, i can add a
space if i need to.

Let me get this clear - you now want

Extract 5?
and
Extract 5?

but

Extract ?5
and
Extract ?5

plus, if possible, you want the horizontal part of the symbol
longer?

The first part should be easy enough, but it will require the
wildcard option, which means that the searches will be case
sensitive. So we will probably have to replace Upper with upper and
Bottom with bottom first - or are they already the same case?

The second part of the problem may not be so simple. It *may* be
possible to combine two characters e.g
??

but then I have the feeling you will tell me that the horizontal is
too long

If you can find the combination of box characters that will work
for you, I will try and find a way of combining them.... but it
will have to wait until tomorrow at least.


--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



lewisma wrote:
OK, i'm getting there with this, upper/lower left i think are
fine. Here is what upper/lower right currently look like.

Extract ?5 (upper right)

Extract ?5 (lower right)

I need to move the symbols to the right of the number and take out
the space between the two. Is there any adjustment i can make so i
can make both lines slighlty longer ?

If i add a space in the find string after right (upper and lower)
it takes away 1 space but there is still one space left to
remove, i tried adding 2 spaces at the end of right, but that
doesn't change the phrase at all. --
lewisma


"lewisma" wrote:

Works well, now looks like this

Extract ? 5

Extract ?5

Extract ? 5

Extract ?5

Just need to work out how to remove the space for lines 1 and 3
which is upper/bottom right
--
lewisma


"Graham Mayor" wrote:

Are you sure that's it?

Locate the line
..Replacement.Font.Size = 14

and add the following immediately after it

Select Case i
Case 0
.Replacement.Font.Position = -4
Case 1
.Replacement.Font.Position = -4
Case 2
.Replacement.Font.Position = 4
Case 3
.Replacement.Font.Position = 4
Case Else
End Select

This will process each item of the original four in the
replacement array in order. Any others you have added to the
end will not be affected.

As for moving the two items closer together add a space in the
find strings after both occurrences of 'left'
i.e.. "upper left " and "bottom left "

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



lewisma wrote:
I know i'm being a pain, this is what it looks like so far.

Extract ? 5

Extract ? 5

Extract ? 5

Extract ? 5

Is it possible to close the spaces so there is not as much of
a gap between the symbol and the number, the top 2 phrases are
upper so they that symbol would need to go down 1 line and
slighlty across and the bottom 2 are for the lower phrase,
looks like that needs to go up 1 line and slighlty across.
I want to see of i can align them a bit more accurately.

Thanks

You are welcome

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



lewisma wrote:
Graham

Fantastic, your a genius, works like a charm, many many
thanks for your help with this, it would have taken me
forever to figure this all out.

The phrases and their replacements are configured in the
two arrays

vFindText = Array("upper left", "upper right", "lower
left", "lower right") vReplText = Array(ChrW(9496),
ChrW(9492), ChrW(9488), ChrW(9484))

The order in the first list corresponds with the order in
the second list, with each item separated by a comma. You
can use plain text or character strings. If you use the
former you would surround the text with straight quotes as
shown in the first line. In the second line I have used
the unicode numbers for the characters in the extended
character set of the Arial font.

If you are looking up suitable characters use the Insert
Symbol command and browse through those available.
Character 265B might be suitable. Having chosen the
character note the HEX number - here 265B, which you need
to convert to its decimal equivalent. The simplest way to
do that is to use the Windows Calculator in its Scientific
view. With the Hex button checked, type in 265B, then
click the Dec button and if you have done it correctly you
would get 9819. So for that character you would enter
ChrW(9819).

If you want a simple + sign then add "+" to the replace
string instead - or if you prefer ChrW(43)

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



lewisma wrote:
This is fantastic, great job, one last thing if i wanted
to add another phrase in which would be something like
everything or all (this would be for upper right/left and
lower right/left) i think they would require the + symbol
for this to allow for everything, how do i add that into
the current working script

Many thanks

Glad you were able to get there in the end

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org