Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

    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
    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)
    

    Anzeige
    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
    

    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)
    

    Anzeige
    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
    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?
    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
    Anzeige
    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
    

    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

    162 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige