2017-10-05 2 views
1

여러 명의 직원이 근무한 총 시간을 합친 스프레드 시트 (x4)가 있습니다. 한 직원의 합계는 24 시간입니다. 내 기능에서는 Excel이 내부적으로 시간을 나타내는 방식으로 인해 1과 같습니다. '시간'값을 기준으로 셀의 서식을 지정하여 각 사람에 대해 총 시간 (분)을 표시합니다. 나는 typename (hours) = double을 검사했다. 시간 = 1 일 때 시간 => 1이 '참'과 같지 않은 이유를 알 수 없습니다. 그 사람의 스프레드 시트 값에 1 분을 추가하면 예상대로 작동합니까?Excel vba - 논리 오류

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

'변형'은 사용하지 않는 것이 좋습니다. 변수 유형을 강하게 지정하면 도움이됩니다. (또한'format_hours'에'f'가 없습니다.'Option Explicit'을 사용하면 에러를 피할 수 있습니다.) – braX

+0

방금 ​​변수 'hours'에 선행 공백이 있습니다. 이를 제거하면 로직이 예상대로 작동합니다. 그 공간은 어디서 오는거야? – Chas

+0

이 함수가 어떻게 호출되는지 알지 못해서 알기 힘듭니다. 변수 대신 숫자로 인수를 지정한 경우 더 빨리이 변수를 포착했을 것입니다. – braX

답변

0

문제는 Hours as Variant아마 String로 통해 오는, 그리고 날짜/더블 것입니다. 명시 적으로 Date/Double로 확인/변환 한 적이 없으므로 If hours >= 1 Then에서 예상되는 암시 적 변환 및 비교 작업을 수행하지 않은 것일 수 있습니다.

해결 방법 : 명시 적 변환과 비교를 사용하십시오. 암묵적인 것은 필연적으로 이와 같은 불가사의 한 벌레들을 만들어 내기 때문에 짜증이 난다.

+0

예, 확인했는데 그것은 dbl로 전달됩니다. 또한 캐스팅을 시도했습니다. – Chas