Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Decimal Separator Chaos

Decimal Separator Chaos
13.12.2018 16:48:26
Georg
Hallo liebes Forum
ich habe ein Problem mit Dezimaltrennern. Ich bin aufgrund anderer Software gezwungen, ein Komma als Dezimaltrenner zu verwenden.
Meine VBA-Scripts müssen jedoch mit Punkt als Trenner arbeiten, da diese sonst nicht funktionieren.
Ich habe in den Excel-Optionen Punkt als Dezimal und Leerzeichen als Tausenderseparator, in Windows jedoch Komma als Dezimaltrenner eingestellt.
Das funktioniert soweit auch, jedoch ignoriert VBA die Excel-Einstellungen beim Abrufen eine Variable und nimmt die Windows-Einstellungen.
https://www.herber.de/bbs/user/126089.xls
Konnte kein xlsm hochladen, daher xls
Kann das jemand verifizieren und mir hier helfen?
Vielen Dank
Georg
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Decimal Separator Chaos
13.12.2018 19:27:07
ChrisL
Hi Georg
Höchstwahrscheinlich die falsche Herangehensweise. Code aus deiner Datei:
Sub dezimaltrenner()
Application.DecimalSeparator = "."
Application.ThousandsSeparator = " "
Application.UseSystemSeparators = False
Dim var As Double
var = Range("A3").Value
MsgBox var & " " & "bei mir steht hier ein Komma, wenn Windows auf 'Komma' gestellt ist."
End Sub

Meine VBA-Scripts müssen jedoch mit Punkt als Trenner arbeiten, da diese sonst nicht funktionieren.
Beispiel:
If Range("A3").Value = 1.234 Then "Treffer"
Dabei ist es völlig Wurst, wie A3 formatiert ist, solange da eine echte Zahl/Wert steht.
cu
Chris
Anzeige
Ein 'Decimal Separator' ist idR keine reine ...
14.12.2018 00:44:57
Luc:-?
…Format-Angelegenheit, Georg (& Chris),
und richtet sich in der VBE-Wiedergabe tatsächlich nur nach den Windows-Einstellungen, während allein die Wiedergabe in Xl so beeinflusst wdn kann. Hier mag die VBE-Hilfe etwas missverständlich sein. Man merkt das auch daran, dass der TsderTrenner von VBA gar nicht berücksichtigt wird, also reine Formatierung ist. Das ändert aber nichts daran, dass VBA intern ohnehin mit Dezi­mal­Pkt arbeitet, auch, wenn das nicht angezeigt wird. Der in Xl eingestellte Pkt ist demggüber reines Format und kann in VBA folglich nur mit .Text statt .Value ausgelesen wdn. Er ergibt sich auch nicht durch CStr(.Value)!
Wenn deine Pgmm deshalb wirklich nicht fktionieren sollten, musst du darin wohl irgendetwas machen, was zwingend auf die VBA-Wiedergabe lt VBE zugreift (wohl als Text), denn ansonsten (bei RechenOperationen mit Zahlen) wäre das schnurz, da hat Chris ganz recht!
Da wirst du wohl deine Pgmm ändern müssen… ;-]
🙈 🙉 🙊 🐵 Morhn, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit dem Dezimaltrenner in Excel VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung öffnen:

    • Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu starten.
  2. Neues Modul erstellen:

    • Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) > Einfügen > Modul.
  3. VBA-Code einfügen:

    • Füge den folgenden Code in das Modul ein, um den Dezimaltrenner auf Punkt zu setzen:
    Sub SetDecimalSeparator()
       Application.DecimalSeparator = "."
       Application.ThousandsSeparator = " "
       Application.UseSystemSeparators = False
    End Sub
  4. Code ausführen:

    • Setze den Cursor innerhalb der Subroutine und drücke F5, um den Code auszuführen.
  5. Überprüfen:

    • Teste, ob der Dezimaltrenner in deinen Berechnungen jetzt korrekt funktioniert.

Häufige Fehler und Lösungen

  • Problem: Der Code ignoriert die Excel-Einstellungen.

    • Lösung: Stelle sicher, dass du Application.UseSystemSeparators = False gesetzt hast. Dies zwingt VBA, deine benutzerdefinierten Separatoren zu verwenden.
  • Problem: Fehler beim Abrufen von Werten.

    • Lösung: Verwende .Value statt .Text, um sicherzustellen, dass du mit den tatsächlichen Zahlen arbeitest.

Alternative Methoden

  • Ändern der Windows-Einstellungen:

    • Gehe zu den Windows-Systemeinstellungen und passe den Dezimaltrenner unter "Regionaleinstellungen" an. Beachte, dass dies alle Anwendungen betreffen kann.
  • Verwendung von Textfunktionen:

    • Du kannst auch Replace verwenden, um Dezimaltrenner in Strings manuell zu ändern, bevor du mit den Werten weiterarbeitest.
Dim strValue As String
strValue = Replace(Range("A3").Text, ",", ".")

Praktische Beispiele

  • Beispiel für die Verwendung des Dezimaltrenners:
Sub TestDecimalSeparator()
    Call SetDecimalSeparator
    Dim var As Double
    var = Range("A3").Value ' A3 sollte eine Zahl im richtigen Format enthalten
    MsgBox "Der Wert ist: " & var
End Sub
  • Verwendung in einer Bedingung:
If Range("A3").Value = 1.234 Then
    MsgBox "Treffer!"
End If

Tipps für Profis

  • Dokumentation: Halte deine VBA-Änderungen gut dokumentiert, besonders wenn du den decimal separator excel änderst, um Verwirrung zu vermeiden, wenn andere deine Datei verwenden.

  • Testen: Teste deinen Code unter verschiedenen Einstellungen, um sicherzustellen, dass er universell funktioniert und nicht nur in deinem speziellen Setup.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um Probleme mit ungültigen Eingaben zu vermeiden.


FAQ: Häufige Fragen

1. Warum ignoriert mein VBA-Skript die Excel-Dezimaltrennereinstellungen? VBA verwendet standardmäßig die Windows-Einstellungen. Du musst Application.UseSystemSeparators = False setzen, um benutzerdefinierte Separatoren zu verwenden.

2. Wie kann ich sicherstellen, dass meine Zahlen korrekt formatiert sind? Nutze die .Value-Eigenschaft, um sicherzustellen, dass du mit echten Zahlen arbeitest, anstatt mit formatierten Texten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige