2017-10-05 3 views
1

Ich habe eine Tabelle (x4), die Summe der Stunden von mehreren Mitarbeitern zusammen. Ein Mitarbeiter kommt insgesamt auf 24 Stunden. In meiner Funktion, aufgrund der Tatsache, wie Excel Stunden intern darstellt, entspricht das 1. Basierend auf dem Wert von "Stunden" formatiert es dann die Zelle, um die Gesamtstunden anzuzeigen: min für jede Person. Ich habe überprüft - Typname (Stunden) = double. Ich kann nicht sehen, warum Stunden> = 1 nicht mit "Wahr" gleichgesetzt wird, wenn Stunden = 1 sind. Wenn ich den Tabellenwerten für diese Person 1 Minute hinzufüge, funktioniert das wie erwartet?Excel VBA - Logikfehler

Public Function format_hours(hours As Variant) As Variant 
If hours >= 1 Then 
    format_hours = Application.Text(hours, "[hh]:mm") 
ElseIf hours > 0 Then 
    format_hours = Format(hours, "hh:mm") 
Else 
    format_hours = 0 
End If 
End Function 
+1

Die Verwendung von 'Variant' wird nicht empfohlen. Sie werden davon profitieren, wenn Sie Ihre Variablentypen stärker spezifizieren. (Außerdem fehlt ein 'f' in' format_hours' - Verwenden Sie 'Option Explicit', um solche Fehler zu vermeiden.) – braX

+0

Ich habe gerade festgestellt, dass meine Variable 'hours' einen führenden Platz hat. Wenn Sie es entfernen, funktioniert die Logik wie erwartet. Woher kommt dieser Raum? – Chas

+0

Schwer zu wissen, ohne zu sehen, wie diese Funktion aufgerufen wird. Wenn Sie Ihr Argument als Zahl anstelle einer Variante angegeben haben, hätten Sie dies früher bemerkt. – braX

Antwort

0

Das Problem ist, dass die Hours as Variant ist wahrscheinlich als String kommt durch, und kein Datum/Doppel. Da Sie es nie explizit in Date/Double überprüfen/konvertieren, dann führt es in Ihrem If hours >= 1 Then wahrscheinlich nicht zu den impliziten Konvertierungen und Vergleichen, die Sie erwarten.

Lösung: Verwenden Sie explizite Konvertierungen und Vergleiche. Implizite lutschen, weil sie unweigerlich mysteriöse Käfer wie diese produzieren.

+0

Ja, überprüfte es und es kommt als dbl durch. Habe es auch versucht. – Chas