Makro Ergebniss wird nicht als Zahl akzeptiert

deneme_0123

Grünschnabel
Hallo,

ich habe folgendes Problem. Wenn ich das Makro einfügt und gespeichert habe, läuft alles ganz normal.
Das Ergebniss ist auch da. Nur das Ergebniss in der Zelle wird nicht als Zahl definiert und somit bei der Summe nicht berücksichtigt.
Wenn in der Zelle Schriftfont rot ist , wird Zahl "4,5" eingefügt.

Visual Basic:
Function FontColorisRed(Rng As Range)
    Application.Volatile
    If Rng.Font.ColorIndex = 3 Then
        FontColorisRed = "4,5"
    Else
        FontColorisRed = ""
    End If
End Function

Danke im Voraus für die Rückmeldungen.
 

Anhänge

  • makro_Zahl.png
    makro_Zahl.png
    85,4 KB · Aufrufe: 3
Zuletzt bearbeitet von einem Moderator:
Du hast da ein Makro und eine Ganzansicht einer Exceltabellem.
Wo rufst du wie das Makro auf? Die angezeigte Formel beinhaltet dein Makro nicht.
Egal. Du gibst "4,5" oder "" aus. Das ist ganz klar Text.
  1. Definiere den Rückgabewert des Makros als Double (Kommazahl)
  2. Arbeite mit Zahlen und nicht mit Texten, wenn du Zahlen haben willst.
  3. Leer gibt man nicht als lehrer String "" zurück sondern als null.
  4. VBA ist englisch. Um mit Zahlen zu arbeiten nimmt man da nicht das deutsche vermaledeite Komma sondern wie es sich gehört einen Punkt.

Visual Basic:
Function FontColorisRed(Rng As Range) As Double
    Application.Volatile
    If Rng.Font.ColorIndex = 3 Then
        FontColorisRed = 4.5
    Else
        FontColorisRed = null
    End If
End Function

Ob das Makro so sinnvoll ist, ist eine andere Geschichte.
 
Du hast da ein Makro und eine Ganzansicht einer Exceltabellem.
Wo rufst du wie das Makro auf? Die angezeigte Formel beinhaltet dein Makro nicht.
Egal. Du gibst "4,5" oder "" aus. Das ist ganz klar Text.
  1. Definiere den Rückgabewert des Makros als Double (Kommazahl)
  2. Arbeite mit Zahlen und nicht mit Texten, wenn du Zahlen haben willst.
  3. Leer gibt man nicht als lehrer String "" zurück sondern als null.
  4. VBA ist englisch. Um mit Zahlen zu arbeiten nimmt man da nicht das deutsche vermaledeite Komma sondern wie es sich gehört einen Punkt.

Visual Basic:
Function FontColorisRed(Rng As Range) As Double
    Application.Volatile
    If Rng.Font.ColorIndex = 3 Then
        FontColorisRed = 4.5
    Else
        FontColorisRed = null
    End If
End Function

Ob das Makro so sinnvoll ist, ist eine andere Geschichte.
Hallo Yaslaw

vielen Dank für die Mühe.

Es hat mir teilweise geholfen. Es wird jetzt als Zahl definiert aber die anderen Zellen haben stattdessen #WERT! drin.

Die Zellen mit Schriftfont rot sind die Feiertage. Wenn die Feiertage da sind, dann sollte das Ergebnis von G1/I1 berechnet und eingefügt werden.
Und die Zahl 4,5 ist eigenlich nicht konstant. Hier sollte das Ergebnis von G1/I1 kommen. Weil es sich immer ändert. Wie sollte es aussehen ?

Function FontColorisRed(Rng As Range) As Double
Application.Volatile
If Rng.Font.ColorIndex = 3 Then
FontColorisRed = 4.5
Else
FontColorisRed = null
End If
End Function
 
Zuletzt bearbeitet:
Ja, das #WERT dürft aus dem Rückgabewert NULL kommen.
Entweder gibst du 0 anstelle von null zurück. Dann hast du einen Wert mit dem andere Felder rechnen können. Aber es entspricht nicht dem alten "".
Oder du prüfst in den Folgeformeln auf NULL/LEER
Verwenden von WENN, um zu prüfen, ob eine Zelle leer ist - Microsoft-Support
Danke.

die Lösung für #WERT! habe ich schon. Statt Null habe ich Zero genommen. ich will aber wissen, wie ich hier
( FontColorisRed = 4.5 ) statt 4,5, G1/I1 rechnen lassen könnte.
Je nach geleisteten Stunden ( in dem Fall 27) und gearbeietetn Arbeitstagen (in dem Fall 6) müsste Durchschnittwert eingetragen werden.
 
Keine Ahnung. Ich weiss immer noch nicht, wie du das ganze aufrufst. Und warum "Nein"? Mit meinem wenigen, sehr knappen Wissen über dein Projekt und ohne Ahnung wie du das Ganze aufrufst, sage ich dir: Ja!
Hilf uns dir zu helfen!

Achja, um deine Frage ganz richtig zu beantworten. So wird mit mit dem Feld "G11" auf dem Sheet "Tabelle1" gerechnet. Hilft dir garantiert nicht weiter, ist aber die Antwort auf deine Frage.
Visual Basic:
Function FontColorisRed(Rng As Range) As Double
    Application.Volatile
    If Rng.Font.ColorIndex = 3 Then
        FontColorisRed = ThisWorkbook.sheets("Tabelle1").Tange("G11").Value/11
    Else
        FontColorisRed = null
    End If
End Function
 
Keine Ahnung. Ich weiss immer noch nicht, wie du das ganze aufrufst. Und warum "Nein"? Mit meinem wenigen, sehr knappen Wissen über dein Projekt und ohne Ahnung wie du das Ganze aufrufst, sage ich dir: Ja!
Hilf uns dir zu helfen!

Achja, um deine Frage ganz richtig zu beantworten. So wird mit mit dem Feld "G11" auf dem Sheet "Tabelle1" gerechnet. Hilft dir garantiert nicht weiter, ist aber die Antwort auf deine Frage.
Visual Basic:
Function FontColorisRed(Rng As Range) As Double
    Application.Volatile
    If Rng.Font.ColorIndex = 3 Then
        FontColorisRed = ThisWorkbook.sheets("Tabelle1").Tange("G11").Value/11
    Else
        FontColorisRed = null
    End If
End Function
Hallo Yaslaw,

Nochmal Danke für deine Rückmeldung. Es hat nach paar Anpassungen gut geklappt.
Vielen Dank.
 
Zurück