WorkBook|FileSystem|UsedRange|Columns|FreeFile|
|Open~For Output As~
|Print|Open ~For Input As~|
|Do While Not EOF()~Loop|Line Input~|OpenText|Close|
워크시트의 내용 텍스트문서로 만들기
텍스트화일은 세계 공통의 편리한 화일이다
어느 씨스템에서나 쉽게 읽어볼수 있고 쉽게 써넣을수 있는 화일이다
엑셀에 있는 데이타만 텍스트화일로 만들어야 할 경우가 많다
VBA의 I/O함수는 이럴때 참으로 유용하다
위의 시트(SampleData)의 정보를 아래와 같은 텍스트화일(Sample.txt)로 만든다
Sub makeTextFile()
Dim rngData As Range
Dim rY As Range
Dim iFreeFile As Integer
Set rngData = Worksheets("SampleData").UsedRange.Columns(1)
iFreeFile = FreeFile
Open ThisWorkbook.Path & "\sample.txt" For Output As iFreeFile
For Each rY In rngData.Cells
Print #iFreeFile, rY & "|" & rY.Offset(0, 1) & "|" _
& rY.Offset(0, 2) & "|" & rY.Offset(0, 3) & "|" _
& rY.Offset(0, 4)
Next
Close #iFreeFile
End Sub
iFreeFile = FreeFile
은 메모리상의 영역을 iFreeFile에 배당받는다
메모리영역을 포인팅하는 번호표(Handle Number)와 같다
Open ThisWorkbook.Path & "\sample.txt" For Output As iFreeFile
ThisWorkBook.Path & "\sample.txt" 와 같이
현재통합문서의 경로에 Sample.txt라는 이름의
텍스트문서를 만들고 iFreeFile메모리영역에 열어 놓는다
그림과 같이 한줄 한줄
Print #iFreeFile, rY & "|" & rY.Offset(0, 1) & "|" _
& rY.Offset(0, 2) & "|" & rY.Offset(0, 3) & "|" _
& rY.Offset(0, 4)
각행의 각셀의 값을 | 문자로 연결하여 하나의 문자열을 만들어서
Print #iFreeFile 즉 현재 열려있는 텍스트화일에 한줄씩 작성해
나가는것이다
위에서 저장한 텍스트화일을 엑셀화일로 열기(수동으로)
위에서 저장한 텍스트화일을 엑셀화일로 열고 싶다면
아래의 그림과 같이 진행하면 된다
Step_1
Step_2
Step_3
Step_4
Step_5
위에서 저장한 텍스트화일을 엑셀화일로 열기(자동화작업으로)
위에서 손으로 메뉴를 크릭하면서 열었을때는 새로운 화일에
열리게 된다,텍스트화일 자체가 하나의 엑셀화일이 된것이지
엑셀시트가 된것이 아니다
이제 같은 통합문서의 다른 시트에 프로그래밍으로 불러 들여 보자
위에서 만든 텍트트화일(Sample.txt) 의 내용을 시트에 불러들인다
Sub getDataFromTextFile()
Dim iFree As Integer
Dim sPath_File As String
Dim iRow As Integer
Dim sInput As String
Dim shtX As Worksheet
Dim sX As Variant
Dim vX As Variant
Dim iCol As Integer
sPath_File = ThisWorkbook.Path & "\sample.txt"
iFree = FreeFile
Open sPath_File For Input As iFree
Set shtX = Worksheets.Add
Do While Not EOF(iFree)
iRow = iRow + 1
Line Input #iFree, sInput
sX = Split(sInput, "|")
iCol = 0
For Each vX In sX
iCol = iCol + 1
shtX.Cells(iRow, iCol).Value = vX
Next
Loop
Close #iFree
shtX.Cells.Font.Name = "tahoma"
shtX.Columns.AutoFit
End Sub
위의 내용은 텍스트문서를 엑셀에서 매뉴얼로 여는 과정을
매크로 기록기에 기록한 코드 와는 틀린것이다
Sub Macro1()
'
' Macro1 Macro
' uno이(가) 2005-02-28에 기록한 매크로
'
'
ChDir "J:\XL-PROGRAMMING"
Workbooks.OpenText Filename:="J:\XL-PROGRAMMING\sample.txt", Origin:=949, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1 _
), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), TrailingMinusNumbers:=True
End Sub
첫째 것은 VBA의 IO함수를 활용한것이고
두번째것은 WorkBooks집합체오브젝트의 OpenText메소드를 활용한것이고
이것은 WorkBook오브젝트를 생성한것이므로 두개는 근본적으로 틀리지만
초보님들은 좀 헷갈려 한다
아무튼 프로그래밍에 능숙하다면 융통성있는 VBA의 IO함수로 직접 불러 들이기를
훨씬 좋아하게 될것이다
아래 화일에는 위의 OpenText메소드를 사용하는 기록된 매크로를
필요없는 매개변수는 없애는 다이어트를 하여 표현한다
Write And Read TextFile With IO Function