Problem bei benutzerdefiniertem Format & Range.Calculate

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem bei benutzerdefiniertem Format & Range.Calculate

    Hallo liebe Community,
    dies ist mein erster Beitrag.
    Ich habe folgendes "eigenartiges" Problem bei der Berechnung von Zellen aus einem vb Code.


    VB.NET-Quellcode

    1. Dim wert = "2,36"
    2. Dim format = "h"
    3. cell.NumberFormat = "0.00 " & """ " & format & """"
    4. cell.Formula = wert
    5. cell.Calculate()


    Das Problem ist, dass Excel diese Zellen nicht berechnet. Sprich er fügt die Zahl ein (2,36), aber formatiert nicht in das Format (2,36 h).
    In sämtlichen Foren wurde immer nur auf die .Calculate - Funktion verwiesen.
    Ich hoffe ihr könnt mir helfen
    Liebe Grüße ;)
    zunächst mal alles wegmachen. Dann probier einfach:

    VB.NET-Quellcode

    1. cell.Value = 2.36


    Dein Problem ist, dass du Datentypen nicht unterscheidest. "2,36" ist keine Zahl, sondern ist ein String. Logisch kann ein NumberFormat hier nichts bewirken, denn NumberFormate sind für Numbers.
    Und wenn du Calculate() aufrufst solltest du einen Grund dafür haben. Wenn du keinen Grund hast, dann rufe es besser nicht auf.
    Ich zB kann hier keinen Grund erkennen.
    Hallo ErfinderDesRades,
    vielen Dank für dein Lösungsvorschlag, du hattest Recht. Ich bin fälschlicherweise davon ausgegangen, dass Excel diesen String automatisch in ein Zahlenformat umwandelt.
    mit Convert.ToDouble() klappts.
    Danke!
    mein Vorschlag geht aber viel weiter, als nur einen String nach Double zu konvertieren: Sieh zu, dass überhaupt kein String entsteht.
    Vlt. muss wert von vornherein überhaupt kein String sein, sondern kann gleich als Double deklariert werden?
    Dann kann man
    a) vernünftig damit rechnen
    b) auf Konvertierung verzichten

    Konvertierungen sind immer riskant und generell ein Anlass, eine Alternative zu suchen. Denn eine Konvertierung setzt punktuell die Compiler-Überprüfung auf Typ-Konsistenz aus, und damit ein Grund-Feature der Sprache.