View Single Post
  #26   Report Post  
Posted to microsoft.public.word.docmanagement
lewisma lewisma is offline
external usenet poster
 
Posts: 16
Default Creating a Macro

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.
--
lewisma


"Graham Mayor" wrote:

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