WorkBook|Workbook|Workbooks|Open|ActiveCell|
|ActiveSheet|ActiveWorkBook|Path|FullName|CodeName|
|Dir()|
통합문서는 Workbook오브젝트가 관리한다
앞에서 살펴본 Range오브젝트는
이미 정해진 행과 열의 갯수내에서 접근하는것이고
Worksheet오브젝트가 관리하고
Worksheet오브젝트는 여러장 계속 만들어 넣을수가 있으니
여러개의 Worksheet오브젝트를 관리해줄
Worksheets오브젝트라는 집합체(Collection)가 필요해 진다
Worksheets라는 집합체오브젝트는 통합문서가 관리하게 되고
통합문서는 Workbook오브젝트라고 하게 된다
역시 마찬가지로 통합문서(Workbook)는 한없이 찍어낼수있는
XLS화일이니 당연히 이것을 관리할 집합체오브젝트
Workbooks오브젝트라는것이 필요하게 되고
마지막으로 이것은 Application오브젝트가 관리하게 되는것이다
이제 Workbook오브젝트에 대하여 이야기해보도록 하자
통합문서 열기
통합문서의 열기는 Workbooks집합체오브젝트의 메소드가 수행한다
Workbooks.Open filename:="경로명\화일이름.xls"
와 같은 명령으로 실행된다
물론 경로명을 반드시 정확하게 주어야 하는것은 당연하다
화일명과 경로명을 안다면 지극히 간단하다
이때 이런 질문이 있을수 있겠다
화일이름이 앞의 5문자가 Sample로 시작되는 화일을 모두 찾아서
열고 싶은데 어떻게 해야 되나요??
이래서 프로그래밍을 하게 되는것이고 프로그래밍의 매력이
이런 곳에 있는것이다
수많은 홀더내에 이곳에 넣었다..저곳에 넣었다 했는데
그것을 일일이 어떻게 찾나??
윈도우에서 제공하는 찾기에서 찾아서 종이에 메모해서
그 경로명과 이름을 코딩에 적용한다??
이 또한 끔찍한 일이다
현재 실행되는 코드를 갖고 있는 통합문서에 접근하기
현재 활성화된 셀에 접근할때는 Application.ActiveCell
현재 활성화된 시트에 접근할때는 Application.Activesheet
현재 활성화된 통합문서에 접근할때는 Application.ActiveWorkbook
으로 접근 할수 있다
모두 Application오브젝트의 속성들이고 Application오브젝트의 표현은 생략해도 된다
ActiveWorkbook.Path
는 현재 활성화된 통합문서의 경로명을 얻을수 있고
ActiveWorkBook.FullName
은 경로명과 화일명을 포함한 정보를 얻을수 있다
Workbook오브젝트가 제공하는 속성을 통하여 각종정보를 얻을수 있는것이다
더욱 편리한 속성하나가 있다
현재 실행되는 코드를 갖고 있는 통합문서에 접근하는것은 중요한 일이다
이때 제공되는 속성은 ThisWorkBook이라는 것이다
Workbooks("현재실행코드가 들어있는 화일").FullName이라고 하는것 보다는
ThisWorkBook.FullName이 간단하고 좋거니와 화일의 이름이 바뀌더라도
전혀영향을 받지 않는다
Worksheet에서 Name보다는 CodeName속성이 편리한것과 같다
통합문서를 열때나 활성화시킬때 화일의 존재여부 확인작업이 필요
워크시트에서도 접근하고자 하는 시트가 존재하는지 확인하는 작업이
필요하듯이 통합문서도 역시 마찬가지다
만약 현재 코드를 갖고 있는 통합문서와 같은 경로에 있는
sample.xls라는 화일을 열려고 한다
sample.xls이라는 화일이 열려있는지 우선 확인하고
열려있지 않다면 다시 컴퓨터의 해당경로에서 찾아야 한다
이때도 존재하면 열고 그렇지 않다면 화일이 존재하지 않는다고
사용자에게 알려주어야 한다
위의 그림의 흐름을 코딩하면 아래와 같이 되겠다
Sub fileOpen()
Dim sFileName As String
sFileName = "sample.xls"
If Not isFileExist(sFileName) Then
If Dir(ThisWorkbook.Path & "\" & sFileName) <> "" Then
Workbooks.Open ThisWorkbook.Path & "\" & sFileName
Else
MsgBox sFileName & " 화일은 존재하지 않습니다"
End If
Else
Workbooks("sample.xls").Activate
End If
End Sub
Function isFileExist(sFile As String)
Dim sName As String
On Error Resume Next
sName = Workbooks(sFile).Name
isFileExist = IIf(sName = "", False, True)
End Function