Dezimaltrennzeichen und Laufzeitfehler
09.04.2022 12:06:08
sab
Ich stehe hier gerade an einem Problem an und komme einfach nicht weiter. Vielleicht hat jemand von euch eine Idee, was ich tun könnte.
Vorweg: Ich arbeite mit Office 365, aber funktionieren sollte das Ganze nachher auch mit anderen Excel-Versionen (daher habe ich die Version oben auch nicht angegeben).
Das Problem:
Aus einer Tabelle lese ich Werte in ein UserForm (in Textfelder), wo sie einerseits bearbeitet werden können, andererseits wird auch noch ein Mittelwert berechnet.
Nun renne ich fortlaufend in einen Typenfehler, sobald die Werte Dezimalzahlen sind (möglich sind Werte 0, positive Ganzzahlen und Dezimalzahlen).
Wenn ich mit Debug.Print schaue, was da eigentlich passiert, dann stelle ich fest, dass im Textfeld die Dezimalwerte immer mit , gespeichert werden. In der Tabelle ist es - meiner Systemsprache entsprechend - ein . Allerdings hilft es auch nicht, wenn ich im System z.B. auf Englisch umstelle und die Datei dann neu öffne.
Ich mache mal ein Beispiel => Ich lese Werte ein mit
Dim tabellenwerte As Variant
Dim i As Integer
tabellenwerte = ActiveSheet.Range("auszulesenderBereich").Value
For i = 1 To 12
Controls("textfeldA" & i).Value = tabellenwerte(i, 1)
Controls("textfeldB" & i).Value = tabellenwerte(i, 2)
Controls("textfeldC" & i).Value = tabellenwerte(i, 3)
Controls("textfeldD" & i).Value = tabellenwerte(i, 4)
Controls("textfeldE" & i).Value = tabellenwerte(i, 5)
Next
Das funktioniert noch, wobei Debug.Print folgendes ausgibt:
Debug.Print "Wert im Formular: " & Controls("textfeldA" & i).Value & " | Tabellenwert: " & tabellenwerte(i, 1)
=> Wert im Formular: 25,5 | Tabellenwert: 25.5 (hier sieht man das Problem mit , und .Im nächsten Schritt möchte ich mit den Werten rechnen und hier kommt dann der Laufzeitfehler:
Dim j As Integer
For j = 1 To 12
Controls("berechnungsfeld" & j).Value = ( _
Controls("textfeldA" & j).Value + _
Controls("textfeldB" & j).Value + _
Controls("textfeldC" & j).Value + _
Controls("textfeldD" & j).Value + _
Controls("textfeldE" & j).Value ) / 5
Next i
Das resultiert in:
Laufzeitfehler '13':
Typen unverträglich
Sind es nur Integer-Werte tritt das Problem nicht auf. Gestern Nacht war der Fehler auch irgendwann mal weg und ich dachte, ich hätte das Problem gelöst. Aber als ich mich heute morgen daran setzen wollte, dass dem Anwender nur zwei Kommastellen angezeigt werden (diese aber nicht weggerundet werden sollen) und kein Dezimaltrennzeichen, falls es eine ganze Zahl ist, trat der Fehler plötzlich wieder auf. Aber vielleicht war ich gestern auch einfach zu müde und hab falsch getestet.Experimentiert habe ich mit allem möglichen, unter anderem CDbl() an diversen Stellen und ich habe sogar überlegt, ob man vielleicht einfach das , durch einen . ersetzen könnte - aber ich bin mir nicht sicher wo am sinnvollsten und denke, dass es da doch eigentlich eine bessere Lösung geben müsste. Das Thema müsste doch häufiger vorkommen, oder?
Hat vielleicht jemand einen Hinweis oder eine Idee? Ich bin gerade etwas verzweifelt.
Lieben Dank schon mal :)
P.S.: Die Datei kann ich leider nicht so einfach hochladen. Aber falls es gar nicht anders geht, könnte ich noch versuchen eine Art Demo-Datei zu basteln und den Fehler da zu reproduzieren. Aber vielleicht ist es ja ein einfaches Problem und es reichen ein paar Tips.