2012-10-12 2 views
7

현재 문제가 많아 문제가 많습니다. 누군가가 나를 도울 수 있기를 바랍니다. 저는 Office 2007 (32 비트) 및 Office 2010 (64 비트) 모두 사용되는 대기업에서 근무합니다. 전체 회사를 통해 호환 될 수있는 매크로를 작성하는 것은 어려운 일이었습니다 (저는 전에 VBA에서 프로그래밍 한 적이 없었습니다. 실제로이 포럼이 도움이되었습니다). 내 임무는 공유 된 Excel 시트에서 하나의 큰 테이블을 유지하는 것입니다. 여러 개의 매크로와 여러 개의 userform이 있습니다. 이제 문제를 간략하게 설명 할 것입니다. 시트에는 날짜 형식 (시작 날짜와 종료 날짜)이있는 두 개의 열이 있습니다. 두 값 모두 사용자 폼의 텍스트 상자 열 형식으로 가져옵니다 (commandbutton은 MsCal을 점심으로 점령하여 해당 텍스트 상자에 날짜를 채 웁니다). 필자가 필요로하는 것은 필터링 및 기타 작업을 수행하기 위해 두 열 모두에 mm/dd/yyyy 형식의 날짜 형식을 사용하는 것입니다. 이 값이 영어가 아닌 다른 현지화를 사용하는 작업자에 의해 업데이트 될 때 미국 날짜는 dd.mm.yyyy로 입력됩니다. 그게 불가능한 날짜를 기반으로 적절한 필터링을합니다. 나는 다음과 같이 형식화를 변경하려고 시도했다.여러 현지화에서 동일한 날짜 형식

UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy") 

그러나이 코드는 어딘지 모르게 발생한다. 일부 컴퓨터에서는 작동하지만 일부 컴퓨터에서는 작동하지 않습니다. 그리고 저에게 두통을주는 것은 thats입니다. 지금 어떻게해야합니까? 시트에서 동일한 날짜 형식을 사용하고 Windows의 현지화 설정을 무시하도록 강요하는 방법이 있습니까? 직원은 형식에 익숙하거나 다른 응용 프로그램에 필요하기 때문에 영어 (미국)로 현지화를 변경하고 싶지 않습니다. 이 시트가 열릴 때만 현지화를 일시적으로 변경하는 방법이 있습니까? 조언이있을 것입니다. 미리 감사드립니다 피터

+0

Excel 셀의 날짜는 날짜가 아니고 문자열이어야합니다. asterix * (일반적으로 Format Cells/Date 옵션의 첫 번째 2 옵션) 앞에 오는 날짜 형식으로 셀 형식을 설정하면 날짜가 사용자의 현지 날짜 형식으로 변경됩니다. 하지만 기본 셀은 형식에 관계없이 사용할 수있는 날짜 표시 숫자입니다. 텍스트 상자에 날짜를 입력하거나 문자열을 날짜로 변환해야하는 경우 이는 다른 문제이므로 추가 처리가 필요합니다. http://stackoverflow.com/questions/12495504/how-to-convert-a-string-into-date/12497237#12497237 – user3357963

+0

@PeterT를 참조하십시오. 표에서 날짜 열은 텍스트 또는 날짜로 형식이 지정됩니까? – CaBieberach

+0

날짜가 – PeterT

답변

1

최선의 방법은 날짜 변수를 텍스트로 변환하지 않는 것입니다.

내부적으로 Excel의 경우 날짜는 단지 연속적인 숫자입니다 (소수점 구분 기호에서 왼쪽은 소수점 구분 기호로부터의 일 및 오른쪽이 시간 임). 예를 들어 2012 년 6 월 10 일의 경우 Excel의 경우 입니다. 이 날짜 값은 컴퓨터에 설정된 날짜 형식과는 별개입니다.

날짜를 표현할 때 (사람이 시각화 할 때) Excel은이 내부 값을 컴퓨터에 설정된 형식의 문자열로 서식을 지정합니다. 예를 들어 컴퓨터에 미국 날짜 형식이있는 경우 41188 날짜는 6/10/2012로 형식이 지정됩니다.

날짜가 큰 문제는 올바른 형식으로 날짜를 입력하는 것입니다.날짜를 문자열 ("6/10/2012")로 입력하면 Excel은 컴퓨터에 설정된 날짜 형식에 따라 날짜를 해석합니다. 미국 형식이있는 경우 첫 번째 암호를 월로, 두 번째 숫자를 일로, 마지막 숫자를 연도로 사용합니다. 독일어 형식을 사용하는 경우 첫 번째는 일, 다음은 월로, 마지막은 일년으로 읽습니다. 그래서, US Format Excel에 대한 동일한 입력 ("6/10/2012")은 6 월 10 일을 독일어 형식으로 읽습니다. Excel은 Oktober의 6th를 읽습니다.

귀하의 경우에는 Textbox10 내부의 날짜를 형식화하지 마십시오. 미국 형식의 Excel의 경우에는 문제가 없지만 다른 날짜 형식 인 경우 첫 번째 암호가 월 대신 하루가되면 잘못된 값이 표시됩니다. 이 예제를 확인하십시오. 독일의 형식으로 엑셀 (DD.MM.YYYY) 년 6 월의 사용자 입력 10

  1. Calendar1.Value는 날짜 값을 검색 (41,188)
  2. Format(Calendar1.Value, "mm/dd/yyyy") 문자열 "2012년 6월 10일에 날짜 값을 변환 "
  3. 공식 날짜 (STRING)를 사용하는 경우 Excel은 날짜를 해석해야합니다. 컴퓨터 날짜 형식은 독일어이므로 일 : 06, 월 : 10, 년 : 2012로 표시됩니다. 당신은 하루에 사용하는 것입니다 41,070 대신 Calendar1.Value는 날짜 변수를 검색하고 당신이 날짜 형식의 열에이 날짜 변수를주는 경우에 는 41,188

, 당신은에 allways 당신의 열에서 올바른 골짜기를 얻을 것이다 당신은 것입니다 열 셀 또는 사용자 컴퓨터에 설정된 형식 내에 설정된 날짜 형식에 관계없이 날짜를 올바르게 필터링하고 정렬 할 수 있어야합니다.


지금, 당신의 경우, 가장 필요한 세포에 직접 Calendar1.Value 지정하는 것입니다. 같은 뭔가 :

ThisworkBook.WorkSheets("Sheet1").Range("C3").Value= Calendar1.Value 

할 수 있습니다 만 편집 옵션은 달력 컨트롤이되도록 자신의 선택을 볼 수 있지만, TextBox10을 해제 할 수있는 사용자에 대한 TextBox10에 Calendar1.Value 여전히 asign. 그리고 날짜와 함께 작업 할 때, TextBox10에서 그것을 추측 한 istead는 Calendar1.Value에서 직접 가져옵니다.

Calendar1에서 선택한 값을 텍스트 상자에 표시해야하는 경우 텍스트 상자에서 날짜의 서식을 지정하지 마십시오. 대신, 사용 :

UserForm1.TextBox10.Value = Cstr(Calendar1.Value) 

이러한 방식으로, 사용자는 그가 자신의 컴퓨터에 설정 한 DATEFORMAT 날짜를 표시하고있는 그는에 사용 할 수 있습니다.

+0

대단히 고마워요. 내가 찾던 이런 종류의 대답. – PeterT

0

하나의 해결책은 날짜의 숫자 형식을 사용하지 않는 것입니다 오히려에만 서식 문자열로 "mm/dd/yyyy"를 지정하는 모든 휴대 날짜에 대해 사용자 정의 형식을 사용합니다. 그러나 내 경험에 따르면 컴퓨터의 국가 별 설정이 "mm/dd/yyyy"으로 설정되어있는 경우이 동일한 문자열로 사용자 지정 셀 서식을 지정하면 컴퓨터 설정에 연결된 데이터 관리자로 유지되므로 도움이되지 않습니다. 이 문제를 해결 한 방법은 내 컴퓨터에서 날짜 형식을 변경 한 다음 셀을 사용자 지정 "mm/dd/yyyy"형식으로 저장 한 다음 컴퓨터 설정을 다시 원래 상태로 되돌려 놓는 것입니다. 날짜 셀이라고 주장하면 컴퓨터의 설정을 변경해도 셀의 값이 변경되지는 않습니다.

TEXT 함수를 호출하는 데이트 셀 옆에 항상 셀이 있어야합니다. 따라서 A1에 날짜가 있고 다른 셀에 =TEXT(A1, "mm/dd/yyyy")이 있고 새 셀만 참조하면됩니다. 하지만 그렇게되면 스프레드 시트가 매우 엉망이 될 수 있습니다.

아마도 가장 좋은 해결책은 IT 부서에서 회사의 날짜 설정에있는 모든 사용자가 동일한 형식을 사용하도록 설정하는 것입니다.

+0

인 Dan으로 작성되었습니다. 답변 해 주셔서 감사합니다. 셀 형식을 사용자 지정으로 변경하면 측정 항목, 피벗 등을 계산하는 데 사용되는 다른 매크로가 오작동을 일으킬 수 있습니다.이 매크로를 사용하려면 날짜에 셀 서식을 설정해야합니다. 이 매크로는 다른 사이트에서 개최됩니다.또한, 전체 파일은 프로그램에 의해 약하게 기반으로 원격으로 업데이트되며, 셀을 기본 상태로 설정합니다 (프로그램에 의해 설정 됨). 아무 것도 도움이되지 않으면, 나는 당신이 언급 한대로 IT 부서에 연락해야 할 것 같아요. 솔직히 그 시나리오를 피하고 싶습니다. – PeterT

+0

결론적으로, 나는 테이블을 바꿀 수 없다. (열 추가/제거, 형식 변경 등). 테이블에 데이터를 쓰는 VBA 코드 만 변경할 수 있습니다. – PeterT

+0

어때 이것에 관하여 : UserForm1.TextBox10.Value = Worksheetfunction.Text (Calendar1.Value, "mm/dd/yyyy") – Dan