Office: Dezimaltrennzeichen in VBA

Helfe beim Thema Dezimaltrennzeichen in VBA in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich habe hier ein altbekanntes Problem aber in diesem Forum noch nicht die Lösung für mich gefunden. Ich habe eine Tool, das von einer... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von WordundVBAuser, 19. März 2019.

  1. Dezimaltrennzeichen in VBA


    Hallo zusammen,

    ich habe hier ein altbekanntes Problem aber in diesem Forum noch nicht die Lösung für mich gefunden. Ich habe eine Tool, das von einer GUI Gleitkommazahlen einliest und die Werte weiterverarbeitet. Dabei hatte ich festgestellt, dass das Dezimaltrennzeichen in VBA von Anwender zu Anwender verschieden ist. Ich habe mir dann eine Funktion geschrieben, die feststellt ob VBA mit einem Komma oder mit einem Punkt als Dezimaltrennzeichen arbeitet.
    Hier die relevanten Zeilen aus meiner Funktion:

    Code:
    Meine Funktion hat einen String z.B. "1,5" eingelesen und dann die Variable WP mit "1.5" und WK mit "1,5" besetzt.

    Arbeitet VBA mit einem Punkt als Dezimaltrennzeichen, hat die Funktion CDbl den String "1.5" in die Gleitkommazahlen 1.5 umgewandelt und "1,5" in die Zahl 15. Meine Funktion hat in diesem Fall den String "1.5" zurück gegeben. Zugegeben, dass ist eine ziemlich primitive Methode, hat aber für ein paar Jahre funktioniert.
    Leider ist es jetzt bei zwei Kollegen zu einem Laufzeitfehler gekommen, da die Funktion CDbl das String "1,5" aus unerklärlichen Gründen nichtmehr verarbeiten konnte.

    Nun wollte ich das Dezimaltrennzeichen von VBA auf einen eleganteren und nicht fehleranfälligen Weg feststellen und bin dabei im Forum auf

    Application.DecimalSeparator

    gestoßen. Voller Vorfreude habe ich das in meinem Quellcode eingearbeitet. Ich habe dieser Variablen probehalber einmal ein Punkt und dann ein Komma zugewiesen und musste feststellen, dass sich das Dezimaltrennzeichen in der Exceltabelle geändert hat, aber nicht jenes, das VBA anwendet.

    Meine Frage ist nun, ob es einen anderen Weg gibt, das Dezimaltrennzeichen zu ermitteln, das VBA anwendet??

    :)
     
    WordundVBAuser, 19. März 2019
    #1
  2. Hallo,

    Willkommen im Club.
    Ich sage meinen Exceldeutschen Kollegen, dass sie am besten den Dezimalpunkt, das Tausendertrennzeichen und das Listentrennzeichen auf Windowsebene einstellen.
    Und dass sie mit ihrem Unternehmen gemeinsam zu Excelengländern werden sollten (ok, eigentlich Officeengländer), falls sie sich im internationalen Finanzumfeld bewegen.

    Viel Spaß,
    Bernd P
     
    Sulprobil, 21. März 2019
    #2
  3. Hallo,

    also ich meine, dass VBA Englisch spricht. Und da ist das Dezimaltrennzeichen der Punkt, unabhängig von irgendwelchen Ländereinstellungen.

    Ich denke eher, du hast ein Problem mit den Länderspezifischen Trennzeichen.

    Hilft dir das weiter?

    PHP:
             Public Sub Test()
    Dim Zahl As VariantZahl_1 As Double
    Dim Zahl_3 
    As Double

    'Eingabe mit Punkt oder Komma als Dezimalseparator
    Zahl = InputBox("Bitte Zahl eingeben", Zahl)

    '
    VBA spricht Englisch also
    Punkt als Dezimalseparator
    Zahl_1 
    1.9

    If Application.DecimalSeparator "," Then
    Zahl 
    CDbl(Replace(Zahl"."","))
    MsgBox "Komma als Dezimalseparator"
    MsgBox Zahl
    ElseIf Application.DecimalSeparator "." Then
    Zahl 
    CDbl(Replace(Zahl"."","))
    MsgBox "Punkt als Dezimalseparator"
    MsgBox Zahl
    End 
    If

    Zahl_3 Zahl Zahl_1
    MsgBox Zahl_3
    End Sub
     
    Werner.M, 21. März 2019
    #3
  4. Dezimaltrennzeichen in VBA

    Hallo Werner,

    wie Bernd geschrieben hat ist es tatsächlich so, dass VBA das Dezimaltrennzeichen (DTZ) verwendet, welches auf Windowsebene eingestellt ist. Es ware für mich nun hilfreich, wenn ich im Quellcode abfragen kann welches Dezimaltrennzeichen dort eingestellt ist. Application.DecimalSeparator bezieht sich nur auf das DTZ welches in der Exceltabelle angewendet wird. Das bringt mich nicht weiter.

    Notfalls muss ich meine Kollegen auch bitten einheitlich den Punkt als DTZ zu verwenden.

    Grüße
    Michael
     
    WordundVBAuser, 21. März 2019
    #4
  5. Hallo Michael,

    so pauschal kannst du das glaube ich nicht sagen:
    Meines Wissens nach gilt das nur für CDbl(). Val() und die Multiplikation mit --1 arbeiten meinem Kenntnisstand nach immer mit EN-us. Zudem kann Excel-VBA hervorragend auf beliebige Zahleneingaben in Excelzellen zugreifen. Wenn du als GUI also Excelzellen verwendest, wird es vielleicht einfacher.

    Viele Grüße
    derHöpp
     
    derHoepp, 22. März 2019
    #5
  6. Hallo Höpp,
    vielen Dank für die Info! Ich möchte aus bestimmten Gründen weiter bei meiner GUI bleiben. Dennoch, dein Hiweis mit der Val-Funktion bringt mich auf eine weitere Idee, welche ich gleichmal ausprobieren möchte.
    Grüße
    Michael
     
    WordundVBAuser, 25. März 2019
    #6
  7. Hallo Höpp,
    die Funktion Val() erkennt tatsächlich nur den Punkt als Dezimaltrennzeichen. Meine Funktion "DTZ" reduziert sich dann nur noch auf eine Zeile:

    Code:
    Egal ob die Variable Wert eine Zeichenkette mit Punkt oder Komma enthält, die Funktion gibt immer ein Wert vom Typ Double zurück den VBA auch weiter verarbeiten kann. Die Kollegen haben weiterhin die Freiheit in die GUI Zahlen mit Komma oder mit Punkt einzugeben. Es ist auch gleichgültig, welches Dezimaltrennzeichen auf Betriebssystemebene vorgegeben ist. Genau so wollte ich es...

    Vielen Dank nochmal!
    Michael
     
    WordundVBAuser, 25. März 2019
    #7
Thema:

Dezimaltrennzeichen in VBA

Die Seite wird geladen...
  1. Dezimaltrennzeichen in VBA - Similar Threads - Dezimaltrennzeichen VBA

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Excel verschiebt den Komma Punkt; Dezimaltrennzeichen

    in Microsoft Excel Hilfe
    Excel verschiebt den Komma Punkt; Dezimaltrennzeichen: Vor Jahren habe ich mir das Dezimaltrennzeichen von Komma auf Punkt umgestellt, da ich viele Daten aus einen anderen Programm konvertiere. Bei Kommatrennzeichen. Hatte ich dann immer wieder...
  7. Dezimaltrennzeichen ändern

    in Microsoft Excel Hilfe
    Dezimaltrennzeichen ändern: Hallo zusammen, ich knöster gerade an folgender Herausforderung: Im Excel-Blatt steht in deutscher Schreibweise (Ländereinstellung des PC) eine Dezimalzahl (z.B. "0,33" = 1/3). Diese lese ich im...
  8. PowerPoint Dezimaltrennzeichen ändern

    in Microsoft PowerPoint Hilfe
    PowerPoint Dezimaltrennzeichen ändern: Hallo, Ich stehe momentan vor dem Problem, dass ich in einer Präsentation, die aus verschiedenen Diagrammen und Texten besteht das Dezimaltrennzeichen von einem Komma (das standardmäßig...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden