2013-08-23 1 views
1

Excel 매크로를 사용하여 주어진 csv 파일의 데이터로 채워진 새 통합 문서를 만듭니다. 하나의 열은 특정 속성 값의 사용자 입력에 개방되어 있습니다.주어진 데이터 형식에 따라 입력 된 셀 값을 확인하십시오.

  • 값 A : "@"
  • 값 B와 같은 형식의 문자열 값 : 정수 값 포맷 "# 데이터 유형 및 특정 형식에 맞게해야한다이 값은 다른 처리 시스템에 의해 받아 들여지기, 여기에 몇 가지 예입니다 "
  • 값 C : 플로트 값 형식의"#은 ## 0,0 ### "
  • 값 D는 : 포맷 진수 값". #을 ## 0,0 # "

지금 내가 원하는. 입력 된 입력 값이 처리를 위해 괜찮은지 확인하기위한 유효성 검증을 추가하거나 문자열 값이 진수 필드에 입력 할 수 없습니다

  • 음의 값은 내가이 검증을 설정하는 방법은 모든 숫자 형식의 필드

허용되지 않습니다 변경, 예 수? 나는 VBA가 갈 수있는 가장 좋은 방법에 대해 새삼스럽지 않다. 지금까지 발견 가능성은 :

  1. Worksheet.Range.Validation를 통해 검증을 추가,하지만 난 정확한 값을 확인하기 위해 Formula1을 설정하는 방법에 어떤 단서를 가지고 있지 않습니다.

  2. Go to Worksheet_Change, 여기서 문제는 분명히 새 통합 문서이므로 내 프로그램 코드에 Worksheet_Change를 포함하지 않은 새 통합 문서를 만드는 것입니다.

그럼 가장 좋은 방법은 무엇입니까?

+0

정규식을? 아마도.? 하지만 난 어떤 정규식을 모르겠다 ... – kpark

답변

0

사용 Worksheet.Range.Validation은 사용자가 클립 보드에서 데이터를 붙여 넣으면 트리거되지 않으므로별로 저장되지 않습니다.

Workbook_SheetChange로 이동하십시오. 유효성 검사를 구현하고 워크 북을 템플릿으로 저장하십시오.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Debug.Assert (Format(Target.Value, "#.##0,0#") = Target.Value) 
End Sub 

이 승인을 사용하는 경우 모든 셀의 텍스트 서식이 올바른지 확인하십시오. 그렇지 않으면 Target.Value가 보간 된 값을줍니다.

그리고 나중에로 CVS를 템플릿을 열고 가져옵니다

wb = Application.Workbooks.Add("path-to-template.xslm") 
Application.EnableEvents = false ' You don't want to trigger change events during import 
myimport(wb) 
Application.EnableEvents = true 
+0

나를 위해 좋은 일을, 나는 유효하지 않은 경우 그것을 대체하는 원래 셀 값을 저장하는 일종의 세마포어와 함께 추가 Workbook_SheetSelectionChange 함수를 추가했다. 감사! – ummecasino

+0

또한 : 비교를 위해 CStr()을 사용하여 대상 값을 변환해야했습니다! – ummecasino

1

VBA가 없으면 통합 문서 쪽에서 데이터 유효성 검사를 통해 상당히 많은 작업을 수행 할 수 있습니다. 예를 들어 값 C의 경우 해당 셀의 사용자 지정 숫자 형식으로 된 서식 (Float 값 "#. ## 0,0 ###")을 넣은 다음 데이터 유효성 검사를 적용하여 숫자 만 확인하십시오 원하는 범위에서 입력하십시오.

관련 문제