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. Textteile aus Zelle mit mehreren Absätzen

    in Microsoft Excel Hilfe
    Textteile aus Zelle mit mehreren Absätzen: Hallo, ich habe folgendes Problem: Ich habe in einer Liste in einer Zelle mehrere Angaben aus denen ich Textteile (z.B. alles was in () oder {} ist) herausziehen will, um damit weiter zurechnen....
  3. Aufrufen Datei aus SharePoint per VBA

    in Microsoft Access Hilfe
    Aufrufen Datei aus SharePoint per VBA: Wer kann mir helfen. In meiner Firma gibt es Dateien in diversen Ordner in Form von SharePoints, worauf alle Kolleginnen und Kollegen zugreifen kann. Dort habe ich eine Excel-Vorlage, worin die...
  4. VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.

    in Microsoft Excel Hilfe
    VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.: Hallo zusammen, Eine Tabelle mit 9 Worksheets, Datenblatt, Studien, Studie_1 ...Studie_7. Auf dem Deckblatt werden in Zelle B4-B10 die Namen der Studien eingetragen. Davon abhängig ob ein Name...
  5. VBA Zeilen kopieren mit Bedingung

    in Microsoft Excel Hilfe
    VBA Zeilen kopieren mit Bedingung: Hallo zusammen, Ich möchte per Makro Zeilen aus Tabelle2 in Tabelle3 kopieren, wenn eine Bedingung erfüllt ist. Bedingung: Der Wert in Spalte E (Tabelle2) kommt in Tabelle1 in Spalte E vor....
  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