Bug in Word-Berechnungen

07/09/2007 - 09:59 von uwe | Report spam
Hallo zusammen,

Wir haben auf einigen PC's mit deutschen Windows XP(SP2) und deutschen
Word (sowohl 2003 als auch 2007) die Notwendigkeit, den Punkt als
Dezimaltrennzeichen zu nutzen. Dies ist nötig um Messreihen mit
amerikanischer Notation richtig verarbeiten zu können. Unter
Systensteuerung -> Regions- und Sprachotionen -> Regionale
Einstellungen -> Anpassen wurde dies für Zahlen eingestellt. Das
Symbol für Zifferngruppierung ist leer, die Wàhrungseinstellungen
wurden nicht veràndert. Bei dieser Konstellation werden Formeln in
Word, z.B. =PRODUCT(a2;c2), völlig falsch berechnet. Für den Fall,
dass man als Zahlenformat 0,00 wàhlt, werden die Vor- und
Nachkommastellen addiert. So wird aus 1 x 1,99 dann 100 !! Wàhlt man
als Zahlenformat #.##0,00 €;(#.##0,00 €) wird es noch schlimmer ! Dort
wird aus 1 x 2,00 plötzlich 200, aus 1 x 2,2 gar 2200 !! Das gleiche
Ergebnis erhàlt man übrigens auch beim Zahlenformat #.##0.00 €;
(#.##0.00 €). Das ganze kann man noch weiter verschlimmern, indem man
bei der Eingabe 1 x 2.20 schreibt. Dann werden es bereits 22000.
Hat jemand eine Idee, wie diesen Fehler umgehen kann?
Besten Dank im voraus.
Gruß
Uwe
 

Lesen sie die antworten

#1 Helmut Weber
07/09/2007 - 13:20 | Warnen spam
Hallo Uwe,

not a bug, a feature.

Allerdings ein sehr unangenehmes,
wenn man mit einer lokalisierten Version arbeiten muss.
Systemeinstellungen zu àndern, ist sehr problematisch.
Da gibt es kaum übersehbare Auswirkungen.

Ich würde mir die gar nicht so große Mühe machen,
nachdem Du in einer VBA Gruppe fragst,
alles selber zu programmieren,
und Formeln und Felder sind mir sowieso ein Graus.

Mal ein erster Ansatz:

Sub KommaPunktTauschen()
Dim oCll As Cell
Dim sTmp As String
For Each oCll In ActiveDocument.Tables(1).Range.Cells
sTmp = oCll.Range.Text
sTmp = Left(sTmp, Len(sTmp) - 2)
If IsNumeric(sTmp) Then
If InStr(sTmp, ".") Then
sTmp = Replace(sTmp, ".", ",")
Else
sTmp = Replace(sTmp, ",", ".")
End If
End If
oCll.Range.Text = sTmp
Next
End Sub
' -
Public Function MyProduct(c1 As Cell, c2 As Cell) As String
Dim s1 As String
Dim s2 As String
Dim x1 As Single
Dim x2 As Single
s1 = c1.Range.Text
s2 = c2.Range.Text
s1 = Left(s1, Len(s1) - 2)
s2 = Left(s2, Len(s2) - 2)
x1 = CSng(s1)
x2 = CSng(s2)
MyProduct = CStr(x1 * x2)
End Function
' -
Sub Test5bbb()
With ActiveDocument.Tables(1).Range
.Cells(3).Range.Text = MyProduct(.Cells(1), .Cells(2))
End With
End Sub

Die Aufgabe besteht nun darin, festzustellen,
ob man sich gerade in der Punkt- oder Komma-Darstellung befindet.

Ich nehme mal an, jeder Lösungsansatz ist willkommen.

Viel Spaß


Gruß

Helmut Weber, MVP WordVBA

"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003 (US-Versions)

Ähnliche fragen