2013-08-22 3 views
3

VBA를 사용하여 텍스트 파일의 내용을 Excel 셀로 복사하려고합니다. 대부분의 텍스트 파일에서이 작업을 성공적으로 수행 할 수 있습니다. 그러나 특정 파일의 경우 코드는 부분 데이터 만 Excel 파일에 복사합니다. VBA를 사용하여 텍스트 파일을 Excel로 복사 할 때 문제가 발생했습니다.

내가 이미 문제가 무엇인지 이해

FileName = folderpath & sFile 
Set mytextfile = Workbooks.Open(FileName) 
mytextfile.Sheets(1).Cells.CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow) 
'mytextfile.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow) 
mytextfile.Close (False) 

복사에 사용되는 코드입니다. 특정 텍스트 파일을 Excel 파일로 여는 동안 일부 내용은 A1 셀에 있고 나머지는 A2 셀에 있습니다.

왜 이렇게 열리나요. !!! 그 내용이 엑셀

FWI 3F5A 041 g1ksIpqub7J 맥밀런 J. PIIKKILA RAYMONDBERRY의 @의 웹 TV에 열 때 다른 세포에 포함되어

1) 텍스트 파일 : 나는 아래 두 개의 텍스트 파일의 내용을 게시하고있다. NET +001 061 477 130 F g3ktHqrwc9 CLE! g1ksIpqub7 CLEHS04C | PO BOX 171 SEARSPORT, ME 내쉬빌 68800 AZ | | 5150 CTY RD 525 롤리 64292 | 나는 위의 텍스트 파일을 사용할 때

18000000 0412CL0 1 N 2

나는 다음과 같은 결과를 얻었다.

FWI 3F5A 041 g1ksIpqub7J 맥밀런 J. PIIKKILA [email protected] 001 061 477 130 F g3ktHqrwc9 CLE g1ksIpqub7의 CLEHS04C |!!!! P.O. BOX 171 SEARSPORT

2) 그 내용이 단일 셀 A1

FSJ! 3U68! 071! gQloo3d5OGG 프레슬리 Y. 타트 JR [email protected] 001 047 475273에 포함 된 텍스트 파일 M gQmqq6d8ME CVE! gQloo3d5OG CVEGF07C | 10001 SW 125TH CT RD 리노 88595 TN | 10849 DEBORAH DRIVE 글렌 데일 70958 | 97400000 0712CV0 0 N

위의 텍스트 파일을 사용할 때 다음과 같은 결과가 나타납니다.

FSJ 3U68 071 gQloo3d5OGG 프레슬리 Y. 타트 JR [email protected] 001 047 475273 M gQmqq6d8ME CVE gQloo3d5OG의 CVEGF07C |!!!! 10001 SW 125 CT RD 리노 88,595 TN | 10849 DEBORAH DRIVE 글렌 데일 70958 | 97400000 0712CV0 0 N

이 두 파일의 내용간에 명백한 차이는 없습니다.

나는이 코드를 시도했지만 어떤 성공하지 않고 :

FileName = folderpath & sFile 
Set mytextfile = Workbooks.Open(FileName) 
mytextfile.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow) 
mytextfile.Close (False) 
+0

부분 데이터는 어디에서 멈 춥니 다? 오류의 출력과 디버깅을 시도한 경우 (예 : 문자가 변경된 경우, 숨겨진 ASCII 문자가없는 경우 등) 오류를 포함하십시오. – jmac

+0

@jmac 나는 내가 얻은 결과를 포함하도록 질문을 업데이트했다. 나는 여러 사이트를 언급했으며 모두 A1 셀의 내용을 복사하여 전체 텍스트 파일을 Excel로 가져 오는 것이라고 말합니다. 이것은 약 50 개의 파일에 대해서는 괜찮 았지만 다른 3 개의 파일에는 적합하지 않은 것처럼 보였습니다. – Foreever

+0

이 질문 (깨진 항목)의 텍스트를 텍스트 파일로 복사하여 붙여 넣으면 다시 작동하는지 볼 수 있습니까? 나는 텍스트 파일이 어떻게 생성되는지 모르지만, 파일에 숨겨진 문자가있어 문제를 일으키거나 다른 것을 망칠 가능성이있다. 일반 텍스트를 다시 복사하면 작동 할 수 있습니다 (또는 적어도 가능한 이유 하나를 제거하십시오). – jmac

답변

5

문제 : VBA에서 *.txt 파일을 읽을 올바른 접근 방식을 사용하지 않는

. Workbooks.Open()을 사용하여 파일을 열면 열린 파일이 *.csv으로 처리됩니다.따라서 Excel에서 스트림을 읽고 쉼표가 발생하면이를 줄 바꿈 기호으로 처리하고 나머지 부분 (은 쉼표 다음에 있음)을 다음 셀로 throw합니다. MSDN Workbooks.Open Method

식 .Open (파일 이름 ...)

통합 문서 객체를 나타내는 변수를 언급한다. 분명히

하는 Workbook object이 아닌 txt 파일.


솔루션 :

올바른 접근 방식은 *.txt 파일의 내용을 읽을 수는 Microsoft Scripting Runtime 도서관에서 FileSystemObjectTextStream 객체를 사용하는 것입니다.

나는 *.txt 파일의 전체 내용을 읽는 간단한 Sub을 작성했습니다. 하기 위해서는 그것은 당신이 당신의 프로젝트 VBE 창에서

에 대한 참조를 추가해야 할 일을 아래로 Tools » References » 스크롤을 클릭, 찾고, 아래의 코드를 통해 지금 화면을Microsoft Scripting Runtime

을 체크하고 수정 당신의 *.txt 파일 또는 매개 변수와 *.txt 파일의 전체 내용을 통해 경로를 통과하는 경로는 첫 번째 시트 Sheet(1)A1

에 배치됩니다
Sub ReadTxtFile() 

    Dim oFSO As New FileSystemObject 
    Dim oFS As TextStream 

    Dim fileName As String 
    ' make sure to update your path or 
    ' pass it to the sub through parameter 
    fileName = "C:\Users\fooboo\Desktop\text.txt" 

    Set oFS = oFSO.OpenTextFile(fileName) 

    Dim content As String 
    content = oFS.ReadAll 

    With Sheets(1).Range("A1") 
     .ClearContents 
     .NumberFormat = "@" 
     .Value = content 
    End With 

    oFS.Close 
    Set oFS = Nothing 
    Set oFSO = Nothing 
End Sub 
+0

잘 작동했습니다. 나 한테 고마워. – Foreever

+0

@ 도움이 될 수있어서 다행입니다. 여기에 stackoverflow에, 우리는 upvoting 및 대답 (* 녹색 체크 표시가 대답의 상단 왼쪽)을 받아 주셔서 감사합니다. –

+0

복사 된 각 텍스트 앞에 왜 이러한 문자가 있습니까? – Foreever

관련 문제