2012-08-03 3 views
4

VBA가 "093 0005"를 날짜로 해석하는 이유는 무엇입니까? MS 액세스 VBA, 다음 줄에 날짜로 숫자를 잘못 해석하는 VBA 형식 함수

: 형식 ("093 0005", "0000000000000")는 "0000000034090는"

34090 날짜 1993년 5월 1일의 VBA 숫자와 동일 반환합니다.

대부분의 경우 이러한 종류의 날짜 가정은 발생하지 않습니다. 예 :

형식 ("092 0250", "0000000000000")은 "092 0250"을 반환합니다. 즉, 서식 적용을 시도하지 않습니다. 0x00000930005 "형식을 반환합니다.

내가 지금까지 생각해 낸 유일한 해결책은 인바운드 문자열에 공백이 포함되어 있거나 IsDate 함수를 사용할 때이 함수를 사용하여 코딩하는 것입니다.

답변

4

이것은 Access 자체와는 아무런 관련이 없습니다. 텍스트가 SPACE, HYPHEN 또는 DASH으로 분리 된 경우 모든 VBA에서 형식 함수는 다음과 같이 작동합니다. 그래서이

Debug.Print Format("093 0005", "0000000000000") 
Debug.Print Format("093/0005", "0000000000000") 
Debug.Print Format("093-0005", "0000000000000") 

그것은 시도하고 날짜 또는 로 변환하고 유효한 날짜 나 숫자 인 경우 다음 당신에게 그것의 숫자 상당을 보여줍니다 것이다 0000000034090

를 반환합니다 . 그리고 날짜 나 숫자가 같지 않으면 그대로 남겨 둡니다. 그 이유는 Format 함수가 값의 "형식"을 확인할 수 없어 문자열로 간주하기 때문입니다. 다음은 Format("Blah", "0000000000000")과 비슷합니다. Format 기능을 000000000blah으로 포맷하는 기능을 기대하지 않는 것이 분명합니다.

불행히도 Format 기능이 이와 같이 작동하는 이유를 설명하는 MS 지식 기반 문서를 찾을 수 없습니다.

나는 과거에 그것을 해결하기 위해 발견 한 유일한 방법은 VAL 함수를 사용하여 숫자로 변환하는 것입니다. 그래서

Debug.Print Format(Val("093 0005"), "0000000000000") 

당신에게 원하는 결과 그러나 0000000930005

숫자가 HYPHEN 또는 DASH로 구분하는 경우 다음 VAL 기능이 쓸모를 줄 것이다. 이를 위해서는 HYPHEN 또는 DASHSPACE으로 바꾸려면 REPLACE을 사용해야합니다. 그러나 나는 HYPHEN 또는 DASH의 숫자를 서식 지정하는 것에 대해서는 의의가 없습니다.

+0

설명해 주셔서 감사합니다. 나는이 함수가 요청한 형식이 날짜와 유사하지 않은 날짜를 숫자로 해석한다는 것이 놀랍다 고 생각한다. 제 솔루션은 제 경우에는 효과가 있습니다. 나는 또한 사용할 수있다 : De –

+0

릭 언제'? (Val ("093 0005"), "0000000000000")'직접 실행 창에 입력? –

+0

내가 0000000930005 –

관련 문제