2016-09-28 2 views
0

한 스프레드 시트에서 데이터를 가져오고 다시 포맷 한 다음 전송하는 데 사용되는 VBA 스크립트에 문제가 있습니다.Excel VBA 미국/영국 날짜 변환 문제

원본 시트의 날짜 항목은 dd/mm/yyyy 형식으로 입력됩니다.

If RolandSource.Worksheets(tFocus).Cells(rFocus, 2).Value <> "" And RolandSource.Worksheets(tFocus).Cells(4, cFocus) <> "" And RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus) <> "" Then ThisWorkbook.Worksheets(1).Cells(rRecord, 6).Value = RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus).Value 

문제는 Excel에서 날짜로 서식을 자동으로 다음, 데이터를 복사하는 것입니다 : 대상 시트는 날짜를 가져 오려면 다음 줄을 사용합니다. 이 과정에서 영국과 미국 날짜 형식 사이에 모호한 날짜가 필요하지 않더라도 변환됩니다.

가져 오는 데이터 집합에 날짜 (dd/mm/yyyy) 또는 텍스트 항목이 포함될 수 있으며 일반적인 날짜 처리 경로에서 오류가 발생합니다. 아무도 제안이 있습니까?

ThisWorkbook.Worksheets(1).Cells(1,2).value = ThisWorkbook.Worksheets(1).Cells(1,1).Value 

(참고 : 당신은 내가 다음 직접 실행 창에서 다음을 실행, 셀 A1에 "2003년 1월 2일"를 입력, 텍스트로 셀 A1을 포맷하여 설명하고있는 문제를 볼 수 있습니다

이 솔루션은 날짜와 단어를 처리해야하는 루프의 일부로 사용됩니다.

미리 감사드립니다.

+3

'ThisWorkbook.Worksheets (1) .Cells (1,2) .NumberFormat = "@"'실행 후'ThisWorkbook.Worksheets (1) .Cells (1,2) .Value = ThisWorkbook.Worksheets (1) .Cells (1,1) .Value'를 사용하여 대상 셀에서 자동 서식을 방지 할 수 있습니다. – omegastripes

+0

Excel은 날짜를 '1 Jan 1900' ='1' (으)로 일련 번호로 저장합니다. 날짜와 비슷한 내용을 입력하면 Excel에서 Windows Regional Short Date 설정에 따라 구문 분석합니다. 'RolandSource'의 날짜가 '실제 날짜'인 경우, 해결 방법은 날짜의 텍스트 표현 인 경우와 다릅니다. 텍스트 표현 인 경우 열을 텍스트로 미리 형식화 한 다음 소스 셀의 '.Text'속성을 복사하십시오. 실제 날짜이고 정확하다면이 문제가 발생하지 않아야하지만 원본 셀의 '.Value2' 속성에 액세스 해 볼 수 있습니다. –

+0

감사합니다 @omegastripes,이 솔루션을 시도했지만 루프가 실패합니다. – user3190686

답변

0

@OmegaStripes와 @RonRosenfeld 덕분에 대답은 소스에서 대상으로 값을 복사하기 전에 셀을 포맷하는 것이 었습니다. 이것은 루프를 실패하게 만들었지 만 If() 문을 추가하여 루프를 오류로부터 보호했습니다. 도움을 주셔서 감사합니다.