Kris_R
Kris_R

Reputation: 2838

VBA Word - changing decimal separator

Some people around me using national localization in windows/office. Unfortunately this leads to situation where my macros fail to do simple math as they using comma for decimal position and the pov-ray files, that I editing, use comma only for list separator and point for decimal one. I know that in Excel one can override system decimal separator using

With Application.
    .DecimalSeparator = "."
    .ThousandsSeparator = ","
    .UseSystemSeparators = False
End With

There is however no such property of Application like DecimalSeparator in MS Word. Is there in MS Word a simple way to overwrite system separator for the time a macros is running? Or do I need to go hard way and replace them during reading of povray files?

Upvotes: 3

Views: 8324

Answers (2)

Gharechae
Gharechae

Reputation: 1

sub ReplaceCommabetweenDigits(sData as String)

 sData = Replace(sData, "0,0", "0.0")
sData = Replace(sData, "0,1", "0.1")
sData = Replace(sData, "0,2", "0.2")
sData = Replace(sData, "0,3", "0.3")
sData = Replace(sData, "0,4", "0.4")
sData = Replace(sData, "0,5", "0.5")
sData = Replace(sData, "0,6", "0.6")
sData = Replace(sData, "0,7", "0.7")
sData = Replace(sData, "0,8", "0.8")
sData = Replace(sData, "0,9", "0.9")
sData = Replace(sData, "1,0", "1.0")
sData = Replace(sData, "1,1", "1.1")
sData = Replace(sData, "1,2", "1.2")
sData = Replace(sData, "1,3", "1.3")
sData = Replace(sData, "1,4", "1.4")
sData = Replace(sData, "1,5", "1.5")
sData = Replace(sData, "1,6", "1.6")
sData = Replace(sData, "1,7", "1.7")
sData = Replace(sData, "1,8", "1.8")
sData = Replace(sData, "1,9", "1.9")
sData = Replace(sData, "2,0", "2.0")
sData = Replace(sData, "2,1", "2.1")
sData = Replace(sData, "2,2", "2.2")
sData = Replace(sData, "2,3", "2.3")
sData = Replace(sData, "2,4", "2.4")
sData = Replace(sData, "2,5", "2.5")
sData = Replace(sData, "2,6", "2.6")
sData = Replace(sData, "2,7", "2.7")
sData = Replace(sData, "2,8", "2.8")
sData = Replace(sData, "2,9", "2.9")
sData = Replace(sData, "3,0", "3.0")
sData = Replace(sData, "3,1", "3.1")
sData = Replace(sData, "3,2", "3.2")
sData = Replace(sData, "3,3", "3.3")
sData = Replace(sData, "3,4", "3.4")
sData = Replace(sData, "3,5", "3.5")
sData = Replace(sData, "3,6", "3.6")
sData = Replace(sData, "3,7", "3.7")
sData = Replace(sData, "3,8", "3.8")
sData = Replace(sData, "3,9", "3.9")
sData = Replace(sData, "4,0", "4.0")
sData = Replace(sData, "4,1", "4.1")
sData = Replace(sData, "4,2", "4.2")
sData = Replace(sData, "4,3", "4.3")
sData = Replace(sData, "4,4", "4.4")
sData = Replace(sData, "4,5", "4.5")
sData = Replace(sData, "4,6", "4.6")
sData = Replace(sData, "4,7", "4.7")
sData = Replace(sData, "4,8", "4.8")
sData = Replace(sData, "4,9", "4.9")
sData = Replace(sData, "5,0", "5.0")
sData = Replace(sData, "5,1", "5.1")
sData = Replace(sData, "5,2", "5.2")
sData = Replace(sData, "5,3", "5.3")
sData = Replace(sData, "5,4", "5.4")
sData = Replace(sData, "5,5", "5.5")
sData = Replace(sData, "5,6", "5.6")
sData = Replace(sData, "5,7", "5.7")
sData = Replace(sData, "5,8", "5.8")
sData = Replace(sData, "5,9", "5.9")
sData = Replace(sData, "6,0", "6.0")
sData = Replace(sData, "6,1", "6.1")
sData = Replace(sData, "6,2", "6.2")
sData = Replace(sData, "6,3", "6.3")
sData = Replace(sData, "6,4", "6.4")
sData = Replace(sData, "6,5", "6.5")
sData = Replace(sData, "6,6", "6.6")
sData = Replace(sData, "6,7", "6.7")
sData = Replace(sData, "6,8", "6.8")
sData = Replace(sData, "6,9", "6.9")
sData = Replace(sData, "7,0", "7.0")
sData = Replace(sData, "7,1", "7.1")
sData = Replace(sData, "7,2", "7.2")
sData = Replace(sData, "7,3", "7.3")
sData = Replace(sData, "7,4", "7.4")
sData = Replace(sData, "7,5", "7.5")
sData = Replace(sData, "7,6", "7.6")
sData = Replace(sData, "7,7", "7.7")
sData = Replace(sData, "7,8", "7.8")
sData = Replace(sData, "7,9", "7.9")
sData = Replace(sData, "8,0", "8.0")
sData = Replace(sData, "8,1", "8.1")
sData = Replace(sData, "8,2", "8.2")
sData = Replace(sData, "8,3", "8.3")
sData = Replace(sData, "8,4", "8.4")
sData = Replace(sData, "8,5", "8.5")
sData = Replace(sData, "8,6", "8.6")
sData = Replace(sData, "8,7", "8.7")
sData = Replace(sData, "8,8", "8.8")
sData = Replace(sData, "8,9", "8.9")
sData = Replace(sData, "8,0", "8.0")
sData = Replace(sData, "9,1", "9.1")
sData = Replace(sData, "9,2", "9.2")
sData = Replace(sData, "9,3", "9.3")
sData = Replace(sData, "9,4", "9.4")
sData = Replace(sData, "9,5", "9.5")
sData = Replace(sData, "9,6", "9.6")
sData = Replace(sData, "9,7", "9.7")
sData = Replace(sData, "9,8", "9.8")
sData = Replace(sData, "9,9", "9.9")


End sub

Upvotes: -2

Kris_R
Kris_R

Reputation: 2838

Being not very patient I did it the "harder way". I declared public variable

Public strDecimal As String

and then on the beginning of main sub I set its value with:

strDecimal = Application.International(wdDecimalSeparator)

Then in source I replaced all read-ins like

CDbl(strShort(5))

with

CDbl(Replace(strShort(5), ".", strDecimal))

and all write-outs like

Selection.TypeText Text:=CStr(Int(1000 * bondRadius) / 1000)

with

Selection.TypeText Text:=CStr(Replace(Int(1000 * bondRadius) / 1000, strDecimal, "."))

It's not as elegant as overwriting systems setting but it took me not too much time and it works for me. If anyone can see reason, why it should on occasion fail, please leave some comments.

I'll play a bit with info from barrowc's comment (thanx) to see if it's read only or read-write value.

Upvotes: 3

Related Questions