PDA

View Full Version : Change language



Ethen5155
01-13-2019, 03:59 AM
Hello,

i'm seeking to modify the attached macro to change the language to in all slides to numbers only, this macro scopes all slides and shapes and changes the language for all text to be English US

i just want it to scope all numbers only


attached two sample files for before and after case.


in before file you will find all text with numbers in English South Africa language


in after file you will find all numbers set to English US and text still in English South Africa





Sub SetLangUS()
Dim scount, j, k, fcount
scount = ActivePresentation.Slides.Count
For j = 1 To scount
fcount = ActivePresentation.Slides(j).Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k).TextFrame _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
fcount = ActivePresentation.Slides(j).NotesPage.Shapes.Count
For k = 1 To fcount 'change all shapes:
If ActivePresentation.Slides(j).NotesPage.Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).NotesPage.Shapes(k).TextFrame _
.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next k
Next j
End Sub23553
23554



cross-posting link: here (https://www.excelforum.com/powerpoint-programing/1259858-change-language.html#post5043064)

John Wilson
01-13-2019, 04:47 AM
It would be a fair bit of work to make the code pick up numbers only - especially as your numbers are in a table which the current code will not even see.

The question then is WHY - Splellchecker would not flag numbers anyway would it?

Ethen5155
01-13-2019, 04:56 AM
Hi John,

Thanks a lot for your reply.

well i just need it because in other languages, numbers should take another language code especially when we deal with RTL languages

for ex, in Arabic text will take Arabic but numbers should remain in EN US.

i tried to do it in regex but still can't get the final code

please check the below code if possible to modify it to change the language for numbers




Sub use_regex()
Dim regX As Object
Dim osld As Slide
Dim oshp As Shape
Dim strInput As String
Dim b_found As Boolean
Dim iRow As Integer
Dim iCol As Integer

Set regX = CreateObject("vbscript.regexp")
With regX
.Global = True
.Pattern = "[0-9]"
End With
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
If oshp.HasTable Then
For iRow = 1 To oshp.Table.Rows.Count
For iCol = 1 To oshp.Table.Columns.Count
strInput = oshp.Table.Cell(iRow, iCol).Shape.TextFrame.TextRange.Text
b_found = regX.Test(strInput)
If b_found = True Then
strInput = regX.Replace(strInput, "$1")
oshp.Table.Cell(iRow, iCol).Shape.TextFrame.TextRange = strInput
End If
Next iCol
Next iRow
Else
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then
strInput = oshp.TextFrame.TextRange.Text
b_found = regX.Test(strInput)
If b_found = True Then
strInput = regX.Replace(strInput, "$1.$2")
oshp.TextFrame.TextRange = strInput
End If
End If
End If
End If
Next oshp
Next osld
Set regX = Nothing
End Sub

John Wilson
01-13-2019, 06:14 AM
I don't really need to "Check the below code" because it has been lifted from our website. It is designed to do something else entirely and cannot be used to changed the number language.

I still don't see what you are trying to achieve (or rather why) but this code should just change the number language. Just top of my head code - not tested.


Sub just_Numbers()
Dim iCol As Integer
Dim iRow As Integer
Dim otbl As Table
Dim osld As Slide
Dim oshp As Shape
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
Select Case oshp.HasTable
Case False
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then Call fixLang(oshp)
End If
Case True
Set otbl = oshp.Table
For iRow = 1 To otbl.Rows.Count
For iCol = 1 To otbl.Columns.Count
If otbl.Cell(iRow, iCol).Shape.TextFrame.HasText Then Call _
fixLang(otbl.Cell(iRow, iCol).Shape)
Next iCol
Next iRow
End Select
Next oshp
Next osld
End Sub


Sub fixLang(oshp As Shape)
Dim W As Long
For W = 1 To oshp.TextFrame.TextRange.Words.Count
If IsNumeric(oshp.TextFrame.TextRange.Words(W)) Then
oshp.TextFrame.TextRange.Words(W).LanguageID = msoLanguageIDEnglishUS
End If
Next W
End Sub

Ethen5155
01-14-2019, 02:01 AM
Hi John,

really i don't have enough words to thank you for that great work. your code works great but there are few comments about it and i will be so much appreciated if it can be solved because you can't imagine how much i need it badly.

1- it doesn't apply on notes on every slide

2- orders like (9:05 AM) , (1/14/2019) , (1-14-2019) . the code doesn't apply on them too

Thanks in advance brother and i hope that you can help me about

Cheers

Ethen5155
01-14-2019, 02:29 AM
can't we just add regex pattern to look for and apply to for the missing two cases mentioned above like:

.Pattern = "[0-9]:[0-9]"
.Pattern = "[0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]"
.Pattern = "[0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]"


and of course to apply on notes too

Ethen5155
01-15-2019, 02:11 AM
:crying: i tried several times in regex but still nothing!!