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

Währungsformat im VBA Code

Forumthread: Währungsformat im VBA Code

Währungsformat im VBA Code
Ralf
Hallo Forum,
ich habe mit dem Makrorekorder einen Code aufgezeichnet.
Nach Formatierung eines Zellbereiches steht u. a. folgendes im Code:
Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
Die Zellen sollen aber in dieser Darstellung angezeigt werden:
#.##0,00 € bzw. [Red]-#.##0,00 €
Was mache ich falsch?
Vielen Dank im Voraus für eine Rückmeldung.
Viele Grüße
Ralf
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Währungsformat im VBA Code
06.02.2012 11:38:18
Rudi
Hallo,
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Gruß
Rudi
AW: Währungsformat im VBA Code
06.02.2012 12:57:55
Ralf
Hallo Rudi,
vielen Dank für die Hilfe.
Ich hatte es genauso händisch formatiert, mit dem Unterschied, dass ich Punkt und Komma vertauscht habe. Jetzt funktioniert es bestens.
Du hattest mir letzte Woche mit einem Code sehr weitergeholfen:
Zur Erinnerung:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngRow As Long, i As Long, blnNein
If Target.Count = 1 And Target.Column = 6 Then
lngRow = Target.Row
Select Case lngRow
Case 8 To 14
blnNein = LCase(Target) = "nein"
Sheets("Hilfstabelle").Columns(lngRow - 3).Hidden = blnNein
Sheets("Diagramm").Columns(lngRow - 3).Hidden = blnNein
Sheets("Diagramm").Rows(lngRow + 22).Hidden = blnNein
If blnNein Then
Range(Cells(lngRow, 3), Cells(lngRow, 4)) = 0
End If
With Tabelle2
.Range(.Cells(lngRow, 3), .Cells(lngRow, 4)).NumberFormat = _
.Range("WertFormat").NumberFormat
End With
If lngRow 

Jetzt möchte ich Deinen Code mit dem folgenden kombinieren:
Sub datalabels_formatieren()
If Sheets("Daten").Range("F14") = "Ja" Then
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(12).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(11).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).Points(10).DataLabel.Text = "=Daten!$E$14"
ActiveChart.SeriesCollection(2).Points(9).DataLabel.Text = "=Daten!$E$13"
ActiveChart.SeriesCollection(2).Points(8).DataLabel.Text = "=Daten!$E$12"
ActiveChart.SeriesCollection(2).Points(7).DataLabel.Text = "=Daten!$E$11"
ActiveChart.SeriesCollection(2).Points(6).DataLabel.Text = "=Daten!$E$10"
ActiveChart.SeriesCollection(2).Points(5).DataLabel.Text = "=Daten!$E$9"
ActiveChart.SeriesCollection(2).Points(4).DataLabel.Text = "=Daten!$E$8"
ActiveChart.SeriesCollection(2).Points(3).DataLabel.Text = "=Daten!$E$7"
ActiveChart.SeriesCollection(2).Points(2).DataLabel.Text = "=Daten!$C$6"
ActiveChart.SeriesCollection(2).Points(1).DataLabel.Text = "=Daten!$C$3"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F14") = "Nein" Then
'Bei Ausblenden von Spalte "K" im Blatt Diagramm (Zelle "F14" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(11).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(10).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F13") = "Nein" Then
'Bei Ausblenden von Spalte "J" im Blatt Diagramm (Zelle "F13" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(10).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(9).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F12") = "Nein" Then
'Bei Ausblenden von Spalte "I" im Blatt Diagramm (Zelle "F12" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(9).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(8).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F11") = "Nein" Then
'Bei Ausblenden von Spalte "H" im Blatt Diagramm (Zelle "F11" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(8).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(7).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F10") = "Nein" Then
'Bei Ausblenden von Spalte "G" im Blatt Diagramm (Zelle "F10" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(7).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(6).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F9") = "Nein" Then
'Bei Ausblenden von Spalte "F" im Blatt Diagramm (Zelle "F9" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(6).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(5).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F8") = "Nein" Then
'Bei Ausblenden von Spalte "E" im Blatt Diagramm (Zelle "F8" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(5).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(4).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
If Sheets("Daten").Range("F7") = "Nein" Then
'Bei Ausblenden von Spalte "D" im Blatt Diagramm (Zelle "F7" im Blatt Daten wird auf "Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
Sheets("Diagramm").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(2).Points(4).DataLabel.Text = "=Daten!$D$6"
ActiveChart.SeriesCollection(2).Points(3).DataLabel.Text = "=Daten!$E$15"
ActiveChart.SeriesCollection(2).DataLabels.Select
Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
Else
End If
End Sub Wie kann ich diesen nun in Deinen ursprünglichen integrieren bzw. kann ich von Deinem Code darauf verweisen mit Call datalabels_formatieren?
Vielen Dank im Voraus für Deine Hilfe.
Gruß
Ralf
Anzeige
DataLabels
06.02.2012 15:07:43
Rudi
Hallo,
ungetestet:
Sub DataLabels_formatieren()
Dim i As Integer
If Sheets("Daten").Range("F14") = "Ja" Then
With Sheets("Diagramm").ChartObjects("Diagramm 1").Chart.SeriesCollection(2)
.Points(12).DataLabel.Text = "=Daten!$D$6"
.Points(11).DataLabel.Text = "=Daten!$E$15"
.Points(10).DataLabel.Text = "=Daten!$E$14"
.Points(9).DataLabel.Text = "=Daten!$E$13"
.Points(8).DataLabel.Text = "=Daten!$E$12"
.Points(7).DataLabel.Text = "=Daten!$E$11"
.Points(6).DataLabel.Text = "=Daten!$E$10"
.Points(5).DataLabel.Text = "=Daten!$E$9"
.Points(4).DataLabel.Text = "=Daten!$E$8"
.Points(3).DataLabel.Text = "=Daten!$E$7"
.Points(2).DataLabel.Text = "=Daten!$C$6"
.Points(1).DataLabel.Text = "=Daten!$C$3"
.DataLabels.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
End With
End If
For i = 7 To 14
With Sheets("Daten")
If .Cells(i, 6) = "Nein" Then
'Bei Ausblenden von Spalte "K" im Blatt Diagramm (Zelle "F14" im Blatt Daten wird auf " _
Nein" gestellt)
'sollen die Datenbeschriftungen so angepasst werden:
With Sheets("Diagramm").ChartObjects("Diagramm 1").Chart.SeriesCollection(2)
.Points(i - 3).DataLabel.Text = "=Daten!$D$6"
.Points(i - 4).DataLabel.Text = "=Daten!$E$15"
.DataLabels.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
End With
End If
End With
Next i
End Sub

kann ich von Deinem Code darauf verweisen mit Call datalabels_formatieren?
Kannst du.
Gruß
Rudi
Anzeige
AW: DataLabels
06.02.2012 15:15:08
Ralf
Hallo Rudi,
ich habe es mir schon gedacht, dass der Code wieder auf wenige Zeilen zusammengedampft werden kann.
Leider funktioniert es nicht.
Es gibt einen Laufzeitfehler 1004 "Ungültiger Parameter" für diese Zeile:
.Points(12).DataLabel.Text = "=Daten!$D$6"
Ich habe meinen (viel zu langen) Code mittlerweile so weit, dass er funktioniert. Allerdings recht langsam, da ja immer alle Möglichkeiten durchgespielt werden müssen.
Es wäre nett, wenn Du nochmals auf Deine Lösung schauen könntest, ansonsten muss ich es bei meiner Lösung belassen.
Viele Grüße
Ralf
Anzeige
AW: DataLabels
06.02.2012 15:36:14
Rudi
Hallo,
wenn du die Mappe hochladen würdest, könnte ich das testen.
Gruß
Rudi
AW: DataLabels
06.02.2012 15:50:22
Ralf
Hallo Rudi,
hier ist sie:
https://www.herber.de/bbs/user/78760.xlsm
Ich musste erst noch einige Daten entfernen.
Viele Grüße
Ralf
Anzeige
AW: DataLabels
08.02.2012 13:35:41
Ralf
Hallo Rudi,
hast Du die Mappe bekommen?
Bitte um Rückmeldung.
Viele Grüße
Ralf
;
Anzeige
Anzeige

Infobox / Tutorial

Währungsformat im VBA Code anpassen


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).
  2. Finde das betroffene Modul oder das Arbeitsblatt, in dem Du den Code anpassen möchtest.
  3. Ändere den NumberFormat in Deinem Code:
    Selection.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"

    Stelle sicher, dass Du das richtige Währungsformat verwendest. Das Beispiel oben sorgt dafür, dass der Euro korrekt angezeigt wird.

  4. Verwende den Makrorekorder, um zu prüfen, wie Excel das Währungsformat aufnimmt. Der Code könnte dann wie folgt aussehen:
    Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

    Passe diesen an, um das gewünschte Format zu erhalten.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 1004 "Ungültiger Parameter"
    Dieser Fehler tritt häufig auf, wenn der DataLabel nicht korrekt referenziert ist. Stelle sicher, dass die Punkte, auf die Du zugreifst, tatsächlich existieren und dass Du nicht versuchst, auf einen nicht vorhandenen Punkt zuzugreifen.

  • Falsches Währungsformat
    Wenn das Währungsformat nicht korrekt angezeigt wird, überprüfe, ob Du das richtige Format in Selection.NumberFormat verwendet hast. Vergiss nicht, die richtigen Symbole und Trennzeichen zu benutzen.


Alternative Methoden

  1. Direktes Setzen des Formats in einer Schleife: Verwende eine Schleife, um das Währungsformat für mehrere Zellen oder Datenbeschriftungen gleichzeitig zu setzen. Dies macht Deinen Code effizienter.

    Dim i As Integer
    For i = 1 To 10
       Sheets("Diagramm").ChartObjects("Diagramm 1").Chart.SeriesCollection(2).Points(i).DataLabel.NumberFormat = "#,##0.00 €;[Red]#,##0.00 €"
    Next i
  2. Verwendung von benutzerdefinierten Formaten: Du kannst auch benutzerdefinierte Formate für verschiedene Währungen erstellen. Zum Beispiel für Euro:

    Selection.NumberFormat = "€ #,##0.00"

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du das Währungsformat in einem VBA-Makro anpassen kannst:

Sub FormatCells()
   With Sheets("Daten")
       .Range("A1:A10").NumberFormat = "#,##0.00 €"
   End With
End Sub

In diesem Beispiel wird das Währungsformat für den Zellbereich A1:A10 in der Tabelle "Daten" gesetzt.


Tipps für Profis

  • Verwende With ... End With: Dadurch kannst Du den Code sauberer und lesbarer gestalten, insbesondere wenn Du mehrere Eigenschaften für dasselbe Objekt festlegst.
  • Makros optimieren: Reduziere die Anzahl der Bildschirmaktualisierungen während der Ausführung eines Macros, um die Geschwindigkeit zu erhöhen:
    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung hinzu, um den Code robuster zu machen:
    On Error GoTo FehlerBehandlung
    ' Dein Code hier
    Exit Sub
    FehlerBehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Kann ich das Währungsformat für mehrere Zellen gleichzeitig ändern?
Ja, Du kannst das Währungsformat für einen gesamten Zellbereich ändern, indem Du die Range-Eigenschaft verwendest.

2. Was ist der Unterschied zwischen Selection.NumberFormat und Cells.NumberFormat?
Selection.NumberFormat bezieht sich auf die aktuell ausgewählten Zellen, während Cells.NumberFormat auf einen spezifischen Zellbereich verweist. Verwende Cells, wenn Du einen bestimmten Zellbereich direkt ansteuern möchtest.

3. Wie kann ich ein benutzerdefiniertes Währungsformat für den Euro erstellen?
Du kannst ein benutzerdefiniertes Format verwenden, indem Du die NumberFormat-Eigenschaft mit dem Eurozeichen und den gewünschten Formatierungen setzt, z.B. Selection.NumberFormat = "€ #,##0.00".

4. Ist es möglich, das Währungsformat dynamisch anzupassen?
Ja, Du kannst das Währungsformat dynamisch anpassen, indem Du Bedingungen in Deinen Code einfügst, abhängig von den Werten in anderen Zellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige