2014-04-22 2 views
0

Excel 워크 시트의 내용을 가져 와서 다른 응용 프로그램에서 가져 오기 위해 CSV 파일로 내보내는 매크로를 작성했습니다.vba를 사용하여 Excel에서 앞에 0이있는 숫자 텍스트 복사

내 문제는 내보내기시 숫자로 해석 될 수있는 텍스트가 포함 된 셀이 숫자로 변환된다는 것입니다. 즉, 텍스트에 선행 0이 있으면이 값이 손실됩니다.

그래서,이 같은 데이터 :

자산 0,100,738 2003년 1월 5일 612

자산, 100738,1/05/2003로 내보낼 것, 612

내 코드 :

Public Sub ExportSheetAsCSV(ByRef sh As Worksheet) 
    Dim dataToExport As Excel.Range 
    Dim newWrkbk As Excel.Workbook 
    Dim FSO As New FileSystemObject 
    Dim dstdir As String 
    Dim dstpath As String 

    Set dataToExport = sh.UsedRange 
    Set newWrkbk = newWorkbook(1, ActiveWorkbook) 
    '' Copy Step: 
    newWrkbk.Sheets("Sheet1").Range("A1").Resize(dataToExport.Rows.Count, dataToExport.Columns.Count).Value = dataToExport.Value 

    dstdir = FSO.BuildPath(FSO.BuildPath(ActiveWorkbook.path, "CSVs"), FSO.GetBaseName(ActiveWorkbook.Name)) 
    dstpath = FSO.BuildPath(dstdir, sh.Name & ".csv") 

    MkDirStructure dstdir 

    newWrkbk.SaveAs Filename:=dstpath, FileFormat:=xlCSV, CreateBackup:=False, Local:=True 
    newWrkbk.Close False 
End Sub 

단계별로 살펴보면 사본 단계 (저장 단계와 반대)에서 앞의 0이 사라지는 것을 볼 수 있습니다.

이 질문은 VBA: preceding zeros dropped when copied over과 비슷한 문제를 다루지 만 주어진 답변 중 어느 것도 저에게 맞지 않습니다. 허용 된 대답은 텍스트 잘못된 세포를 변환하는 것입니다 (그리고 다른 최고 대답은 VBA의의 NumberFormat를 사용하여 동일한 작업을 수행하는 것입니다)하지만,

  1. 나는 세포 그래서이 변환 될 필요가 사전에 알 수없는 I 텍스트로 변환하면되도록
  2. 셀의 값은 식 불편 갱신된다, 다음 식의 텍스트
  3. 날짜 값들이 정수 표현
  4. 이것으로 변환 될 셀의 값이됩니다 심지어 작동하지 않습니다. 셀을 텍스트로 변환하면 선행 0은 여전히 ​​제거됩니다.

아무도이 문제에 대한 해결책을 갖고 있습니까?

감사

답변

1

이 좋아, 조금 더 많은 작업 후, 내가 찾은 해결 방법은 복사/붙여 넣기 특수를 할 것이 아니라 소스의 값으로 목표 범위의 값을 지정하는 것입니다.

그래서,이 라인 :

newWrkbk.Sheets("Sheet1").Range("A1").Resize(dataToExport.Rows.Count, dataToExport.Columns.Count).Value = dataToExport.Value 

우리가 새 파일을 닫기 전에 시작 위치로 돌아갈 수 있도록 원본 통합 문서에 대한 참조가 캐시

Application.CutCopyMode = False 
Set oldWrkbk = ActiveWorkbook 

dataToExport.Copy 
newWrkbk.Sheets("Sheet1").Activate 
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
    xlNone, SkipBlanks:=False, Transpose:=False 
oldWrkbk.Activate 

로 대체됩니다.

2

'텍스트 및 데이터를 복사하기 전에 ... 세포의 필요한 범위 아래 라인을 추가 할 수있는 모든 셀의 형식을 변환 ..

범위. ("B1 : X100000")의 NumberFormat = "@ "

+0

안녕하세요 bp696, 답장을 보내 주셔서 감사합니다. 이것은 http : // stackoverflow의 두 번째 대답과 같습니다.com/questions/493780/vba-preceding-zero-copied-over는 나를 위해 작동하지 않았습니다. 다시 이것을 보면서 나는 그 대답과 당신의 생각을 오해했다고 생각합니다. .NumberFormat = "@"을 사용하여 복사를 시도했으나 문제를 해결하지 못했습니다. 내가 복사 할 범위를 다시 포맷하면, 이는 주요 0 문제를 해결합니다. 원본 범위가 아닌 대상 범위를 텍스트로 다시 포맷한다는 것을 확인할 수 있습니까? – laffoyb

+0

그러나이 솔루션을 사용하면 날짜가 dd/mm/yyyy에서 mm/dd/yyyy로 다시 형식화되어 다른 문제를 일으키는 문제가 발생합니다. – laffoyb

+0

@tensorproduct는 대상 범위를 의미했습니다 ... 당신은 날짜 열을 제외하고 범위를 선택하고 텍스트로 변환 할 수 있습니다 .... – bp696

관련 문제