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

Forumthread: NumberFormat Eigenschaft in VBA

NumberFormat Eigenschaft in VBA
12.02.2021 21:43:29
Gerald
Hallo,
in der Zelle A1 auf dem Blatt "Tabelle1" soll eine Summe mittels VBA geschrieben werden.
Nun soll aber in der Zelle nicht nur der Wert der Summe stehen, sondern der Wert inkl. weiterer Zeichen.
Eines davon ist z.B. eine Abkürzung f. Produkte z.B. CDF
In dem Beispiel habe ich den Wert "CDF" mal der Variable 'Daten' übergeben
Nach Eingabe einer Summe in Zelle A1 soll das ganze dann so aussehen:
(CDF: 320.345 €)
Mein Vorschlag zur benutzerdefinierten Formatierung war folgender Ansatz:
  • 
    Sub test()
    Dim Daten As String
    Daten = "CDF"
    'Format soll in Zelle A1 auf Blatt Tabelle1 dann so aussehen:  (CDF: 320.345 €)
    Sheets(1).Range("A1").NumberFormat = "(" & Daten & " " & "#.##0" & " €"
    End Sub
    


  • Ich bekomme aber immer die Fehlermeldung:
    'Die NumberFormat Eigenschaft des Range-Objektes kann nicht festgelegt werden
    Anzeige

    16
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 21:51:40
    onur
    Wozu überhaupt "Klammer auf" (auch noch ohne "Klammer zu") ?
    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 21:55:46
    Gerald
    Uih, hatte ich vergessen. Muss natürlich auch Klammer zu sein, also:
    Sheets(1).Range("A1").NumberFormat = "(" & Daten & " " & "#.##0" & " €)"
    Dies ist ein Beispiel aus einem Auswertungstool wo in einer Zelle die aktuellen Werte ausgegeben werden, und in einer anderen die Werte des Vorjahres.
    Und dieser Wert (der des Vorjahres) soll in Klammern stehen
    Anzeige
    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 22:10:25
    onur
    DAS ist der Fehler gewesen!
    Du brauchst keine KLAMMERN, sondern zusätzliche GÄNSEFÜßCHEN drumherum:
    Sheets(1).Range("A1").NumberFormat = Chr(34) & Daten & " " & "#.##0" & " €" & Chr(34)
    

    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 22:31:51
    Gerald
    Mmh, also die Klammern sollen ja dargestellt werden.
    Nochmal der ausgegebene Wert ist der des Vorjahres und soll deswegen in Klammern stehen.
    Das Endergebnis, nachdem ich einen Wert z.B. 320345 in Zelle A1 eingebe soll dann so aussehen:
    (CDF: 320.345 €)
    Und das ist mein Versuch der scheitert:
    Sub test()
    Dim Daten As String
    Daten = "CDF"
    'Format soll in Zelle A1 auf Blatt Tabelle1 dann so aussehen:  (CDF: 320.345 €)
    Sheets(1).Range("A1").NumberFormat = "(" & Daten & ":" & " " & "#.##0" & " €)"
    End Sub
    

    Anzeige
    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 22:34:50
    onur
    Sorry, wusste ich nicht.
    Dann so:
    Sheets(1).Range("A1").NumberFormat = Chr(34) & "(" & Daten & " " & "#.##0" & " €" & ")" & Chr(34)
    

    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 22:53:13
    Gerald
    Habe ich versucht.
    Jetzt schreibt er mir in Zelle A1 das Format hin, aber nicht den Wert den ich in der Zelle eingebe.
    Also steht da jetzt:
    (CDF #.##0 €)
    Aber dort wo jetzt #.##0 steht sollte ja eigentlich der Wert 320345 stehen mit Tausendertrennzeichen.
    Also 320.345
    Anzeige
    AW: NumberFormat Eigenschaft in VBA
    12.02.2021 23:01:07
    onur
    Du must JEDEN Textausdruck in Gänsefüsschen setzen:
    Sheets(1).Range("A1").NumberFormat = Chr(34) & "(" & Daten & " " & Chr(34) & "#.##0" & Chr(34) & " €" & ")" & Chr(34)
    

    Das ist nicht ganz richtig, ...
    13.02.2021 01:13:30
    Luc:-?
    …Gerald,
    da Daten einen Text repräsentiert, der natürlich entweder buchstabenweise mit vorangestelltem \ oder als zusammenhängender Text in verdoppelten, weil internen " notiert wdn muss. Das hättest du auch leicht manuell herausfinden können, bevor du dich an die Notation per Pgm machst. Richtig wäre also das:
    Sheets(1).Range("A1").NumberFormat = "(""" & Daten & ":"" #.##0 €)"
    Alles Andere ist überflüssig, weil Xl das auch so versteht. Onur kennt sich damit wohl nicht so gut aus, was man auch an seinem zusätzlichen umständlichen Chr(34) erkennen kann (machen manche, um den Überblick nicht zu verlieren). D.h., seine letzte Lösung ist nicht völlig falsch, aber sowohl umständlich als auch unvollständig (": " nach Daten fehlt).
    Morhn, Luc :-?
    Anzeige
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 02:58:08
    onur
    "Onur kennt sich damit wohl nicht so gut aus, was man auch an seinem zusätzlichen umständlichen Chr(34) erkennen kann" - Stimmt, wozu soll ich auch Numberformat unbedingt mit VBA setzen wollen?
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 10:13:58
    Gerald
    Danke erstmal euch beiden.
    So funktioniert es auf jeden fall, fast.
    Er macht mir nur nicht den Tausender Punkt, trotz #.##0
    Das Ergebnis ist: (CDF: 320456,0 €)
    Sollte aber sein: (CDF: 320.456 €)
    Weder bei der einen noch bei der anderen Variante.
    Gibt es hier noch einen Trick?
    Anzeige
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 10:39:28
    Gerald
    Ah, hab es hinbekommen. Auch wenn es mir nicht plausibel ist.
    Anstatt #.##0 habe ich bei der Formatierung jetzt den Wert ###0,0 genommen
    Und das funktioniert. Aber schlüssig wird mir das nicht
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 10:49:08
    onur
    Ja Excel benimmt sich da etwas seltsam manchmal.
    Ich habe die Zelle angeklickt und über "Zelle formatieren" den Punkt im benutzerdef. Format durch den selben Punkt ersetzt - siehe da, es funkioniert plötzlich !!!?
    Am sichersten ist: beim selber setzen des Formats über VBA: irgend eine Zelle "manuell" formatieren (z.B. A2) und dann:
    Sheets(1).Range("A1").NumberFormat = Sheets(1).Range("A2").NumberFormat
    

    Anzeige
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 11:29:48
    Gerald
    Alles klar, Danke Dir.
    Werde jetzt mal daran gehen und das in meinem Tool einbauen
    AW: Das ist nicht ganz richtig, ...
    13.02.2021 21:59:07
    Trägheit
    Tausendertrennzeichen ist bei NumberFormat das Komma (weil im englischen das dass TTZ ist)
    und Dezimaltrennzeichen ist der Punkt (weil im englischen das dass DTZ ist) - also für Deutsche genau vertauscht.
    Anzeige
    Trotzdem fktioniert das bei mir mit meinem ...
    14.02.2021 01:30:14
    Luc:-?
    …lokalen TsderTrennZeichen, aber ggf nur, weil es ein Leerzeichen ist. Ansonsten wäre hier wohl .NumberFormatLocal besser gewesen.
    Morhn, Luc :-?
    AW: NumberFormat Eigenschaft in VBA
    14.02.2021 11:01:00
    Daniel
    Hi
    Probiers mal so
    .Numberformat = """(" & Daten & ": ""#,##0"" €)"""
    
    Komma muss sein, weil man in VBA meisten mit den amerikanischen Zahlenformaten arbeiten muss, unabhängig von der Länderversion (manchmal kann man auch die Ländertypischen Formate anwenden, dies muss man aber explizit angeben und hat zur Folge, dass das Makro dann nur in dieser Länderversion korrekt funktioniert).
    Wenn man über die vielen Anführungszeichen wegen Doppelung und Stückelung stolpert, kann man das auch übersichtlicher programmieren:
    NuFo = "'(xxx: '#,##0' €)'"
    NuFo = Replace(NuFo, "'", Chr(34))
    NuFo = Replace(NuFo, "xxx", Daten)
    ....Numberformat = NuFo
    

    Gruß Daniel
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    NumberFormat Eigenschaft in VBA


    Schritt-für-Schritt-Anleitung

    Um die NumberFormat-Eigenschaft in VBA korrekt zu verwenden, folge diesen Schritten:

    1. Öffne den Visual Basic for Applications (VBA) Editor in Excel. Dies kannst Du durch Drücken von ALT + F11 tun.

    2. Erstelle ein neues Modul:

      • Rechtsklicke auf ein beliebiges Element im Projektfenster.
      • Wähle "Einfügen" und dann "Modul".
    3. Füge den folgenden Code in das Modul ein:

      Sub test()
         Dim Daten As String
         Daten = "CDF"
         ' Format soll in Zelle A1 auf Blatt Tabelle1 dann so aussehen: (CDF: 320.345 €)
         Sheets(1).Range("A1").NumberFormat = "(""" & Daten & ": "" #,##0 "" €)"
      End Sub

      Dieser Code setzt das NumberFormat für die Zelle A1 auf dem Blatt "Tabelle1".

    4. Führe das Makro aus, um das gewünschte Format anzuwenden. Du kannst das Makro aus dem VBA-Editor heraus oder über das Excel-Menü „Entwicklertools“ starten.

    5. Teste die Eingabe von Zahlen in Zelle A1, um sicherzustellen, dass sie im gewünschten Format angezeigt werden.


    Häufige Fehler und Lösungen

    • Fehler: "Die NumberFormat Eigenschaft des Range-Objektes kann nicht festgelegt werden."

      • Lösung: Stelle sicher, dass der Format-String korrekt ist. Überprüfe, ob alle Textteile in Gänsefüßchen stehen. Beispiel:
        Sheets(1).Range("A1").NumberFormat = "(""" & Daten & ": "" #,##0 "" €)"
    • Fehler: Tausendertrennzeichen wird nicht angezeigt.

      • Lösung: Achte darauf, dass Du das richtige Format verwendest. In deutschen Excel-Versionen ist das Komma das Tausendertrennzeichen. Verwende:
        Sheets(1).Range("A1").NumberFormat = "(""" & Daten & ": "" #.##0 "" €)"

    Alternative Methoden

    Neben der Verwendung der .NumberFormat-Eigenschaft kannst Du auch die .NumberFormatLocal-Eigenschaft verwenden, um sicherzustellen, dass die Formatierung den lokalen Einstellungen entspricht. Beispiel:

    Sheets(1).Range("A1").NumberFormatLocal = "(""" & Daten & ": "" #,##0 "" €)"

    Diese Methode ist besonders nützlich, wenn Du sicherstellen möchtest, dass das Format unabhängig von der verwendeten Excel-Version korrekt angezeigt wird.


    Praktische Beispiele

    Hier sind einige weitere Beispiele zur Anwendung der NumberFormat-Eigenschaft:

    1. Währungsformat:

      Sheets(1).Range("B1").NumberFormat = "€ #,##0.00"
    2. Datumsformat:

      Sheets(1).Range("C1").NumberFormat = "dd.mm.yyyy"
    3. Benutzerdefiniertes Format mit Text:

      Sheets(1).Range("D1").NumberFormat = "[Rot]""Schaden: "" #,##0"

    Tipps für Profis

    • Verwenden von Chr(34): Um Gänsefüßchen im Format-String zu verwenden, kannst Du Chr(34) einsetzen, um die Lesbarkeit zu verbessern:

      Sheets(1).Range("A1").NumberFormat = Chr(34) & "(" & Daten & ": " & Chr(34) & "#,##0" & Chr(34) & " €" & Chr(34) & ")"
    • Überprüfe die Regionseinstellungen: Die Darstellung von Zahlenformaten kann je nach Region variieren. Achte darauf, dass Du die richtigen Trennzeichen verwendest.


    FAQ: Häufige Fragen

    1. Warum erscheint der Wert nicht richtig in der Zelle? Die NumberFormat-Eigenschaft formatiert nur die Anzeige. Stelle sicher, dass Du die Zahl korrekt eingibst, und überprüfe den verwendeten Format-String.

    2. Wie kann ich sicherstellen, dass das Format in anderen Excel-Versionen funktioniert? Verwende die .NumberFormatLocal-Eigenschaft, um die lokale Formatierung zu berücksichtigen. Dies erhöht die Kompatibilität für Benutzer in verschiedenen Regionen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige