WorkBook|Delete|FileSystem|Path|SaveAs|Dir()|
|ThisWorkBook|Do~Loop While|
통합문서(화일) 삭제하기
Workbook오브젝트에는 Delete(삭제)메소드 같은것이 없다
화일을 삭제한다고 하는것은 엑셀자체의 통제관할구역에서 벗어나는것이다
통합문서도 하나의 화일이고 화일을 다루는 영역의 일을 해야 한다
이때는 VBA의 역할에 의존해야 한다
화일을 다루는 함수들의 모임이 VBA의 FileSystem오브젝트에 있다
아래의 그림과 같이 VB편집기창에서 개체찾아보기의 VBA부분을 보면
FileSystem오브젝트가 갖고 있는 메소드들을 볼수있다
현재 코드가 실행되는 통합문서가 위치한 폴더에서
sample.xls화일을 삭제하고 싶다면
Kill ThisWorkbook.Path & "\sample.xls"
라고 하면 삭제되는 것이다
위와 같은 프로시져를 돌리면 그림과 같이 화일이 만들어지고 저장되고
화일이 닫힌다
Sub makeFiles()
Dim iX As Integer
Dim objBook As Workbook
For iX = 1 To 10
Set objBook = Workbooks.Add
objBook.SaveAs ThisWorkbook.Path & "\sample_" & iX & ".xls"
objBook.Close
Next
End Sub
위에 만들어진 화일을 몽땅 삭제하고 싶다면 다음과 같이 하면 된다
Make Files And Delete Files
현재 홀더에서 엑셀화일 읽어오기
어떤 폴더에서 하나의 화일이 존재하는지 알아내기는 쉽다
그러나 xls확장자를 갖고 있는,즉 엑셀통합문서만 어떤 폴더에서
전부 찾아내고 싶다면
만약 현재 통합문서가 들어 있는 폴더내에서 xxx.xls라는 이름의 화일이
존재하는지 알고 싶다면
strX = FileSystem.Dir("xxx.xls")
'혹은
'strX = FileSystem.Dir(ThisWorkbook.Path & "\xxx.xls")
'strX = Dir("xxx.xls")
If strX = "" Then
MsgBox "찾는 xxx.xls화일은 현재 홀더에 존재하지 않습니다"
Else
MsgBox "찾는 xxx.xls화일은 현재 폴더에 존해합니다"
End If
FileSystem이라는 오브젝트명은 생략해도 된다
그러나 어떤 함수가 존재하는지 잘 모르고 스페링이 생각나지 않을때는
아래의 그림과 같이 하면 좋다
위의 구문은 하나의 화일만 알아 보는것이였다
실은 현재 통합문서가 들어있는 폴더내의 모든 엑셀화일을 찾고 싶은것이다
그렇다면 순환을 하면서 찾아야 한다
Sub getFilesInThisFolder()
Dim rStart As Range
Dim sThisFolder As String
Dim sFileName As String
Dim iX As Integer
sThisFolder = ThisWorkbook.Path
sFileName = Dir(sThisFolder & "\*.xls")
Set rStart = ActiveSheet.Range("A5")
rStart = sFileName
Do
sFileName = Dir()
If sFileName <> "" Then
iX = iX + 1
rStart.Offset(iX, 0) = sFileName
End If
Loop Until sFileName = ""
End Sub
순환문이 아직 감이 잘 안집히면 진도가 안나간다
순환문은 반복하여 같은 작업을 할때 없으면 아무일도 못한다
ThisWorkbook이라는 속성으로 현재 통합문서의 오브젝트를 알아내고
이것의 Path속성으로 해당통합문서의 경로명을 알아내고
이것을 VBA의 Dir함수에 전달하여 반복하여 찾아서
통합문서의 Range오브젝트에 하나,하나 전달하는것이다
여러개의 기능들을 조합하여 작업 하는것이 엑셀프로그래밍이다
Find Files In ThisWorkBook Folder With IO Functions