View Single Post
  #16   Report Post  
Posted to microsoft.public.word.docmanagement
Graham Mayor Graham Mayor is offline
external usenet poster
 
Posts: 19,312
Default Hebrew / right-to-left text

Let's say 'alternative' rather than 'easier' However for the additional
issue of two transposed characters, it does not address the capitalisation
where the transposed characters begin a sentence.

--

Graham Mayor - Word MVP

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



Greg Maxey wrote:
Graham,

Seems that StrReverse would be an easier method.

Sub Transpose()
Dim myRange As Word.Range
Dim bSpace As Boolean
Dim pStr As String
Dim i As Long
Dim oWord As Word.Range
Set myRange = Selection.Range
bSpace = False
If myRange.Words.Count 1 Then
If MsgBox("If you want to transpose the entire selection select
yes. Ohterwise only words will be transposed.", vbQuestion + vbYesNo,
"Traspose Entire Phrase") = vbYes Then
pStr = myRange.Text
myRange.Text = StrReverse(pStr)
Else
For i = 1 To myRange.Words.Count
If myRange.Words(i).Characters.Last = Chr(32) Then bSpace = True
pStr = StrReverse(Trim(myRange.Words(i).Text))
If bSpace Then pStr = pStr & " "
myRange.Words(i).Text = pStr
bSpace = False
Next
End If
Else
pStr = myRange.Text
myRange.Text = StrReverse(pStr)
End If
End Sub

On Oct 11, 2:02 am, "Graham Mayor" wrote:
The macro simply re-orders the selected text from end to start as if
you had typed it backwards. I did not envisage using it for long
texts, merely phrases inserted into an English document. However as
I said I have no personal knowledge of left to right languages.

As for transposing two selected characters, that macro would work,
but I suspect the following refinement might suit the task better

Sub Transpose()
Dim sText As String
sText = Selection.Range.Text
If Len(sText) 2 Then
MsgBox "You must select 2 characters!", _
vbCritical, "Transpose Characters"
Exit Sub
End If
If Selection.Range.Characters(1).Case = 1 _
And Selection.Range.Characters(2).Case = 0 Then
Selection.TypeText UCase(Mid(sText, 2, 1)) & _
LCase(Mid(sText, 1, 1))
Else
Selection.TypeText Mid(sText, 2, 1) & _
Mid(sText, 1, 1)
End If
End Sub

--

Graham Mayor - Word MVP

My web sitewww.gmayor.com
Word MVP web sitehttp://word.mvps.org




Peter T. Daniels wrote:
As Tony noted, line breaks will be a problem -- but also, if there's
more than one word, will it reverse each word independently, or do
you need to type your whole clause backward, last-word-first?


This would of course be most useful to make up for the most glaring
omission in Word's editing tools since the very beginning (since
lots of other DTP apps have it) -- "transpose two characters"!


On Oct 10, 9:29 am, "Graham Mayor"
wrote:
Peter T. Daniels wrote:
IF you're using a Hebrew font that just puts the letters in the
a-z, A-Z etc. slots, then yes, you have to type backwards.


If the font requires that the text is typed backwards (and I hasted
to add I have no knowledge of right left languages) that can easily
be fixed with a macro that will reverse the order of selected text
eg


Sub ReverseCharacters()
Dim sText As String
sText = Selection.Range.Text
If Len(sText) 2 Then
MsgBox "You must select at least 2 characters!", _
vbCritical, "Reverse Characters"
Exit Sub
End If
For i = Len(sText) To 1 Step -1
Selection.TypeText Mid(sText, i, 1)
Next i
End Sub


http://www.gmayor.com/installing_macro.htm
--

Graham Mayor - Word MVP


My web sitewww.gmayor.com
Word MVP web sitehttp://word.mvps.org
- Hide quoted text -


- Show quoted text -