본문 바로가기
엑셀/엑셀 VBA

파일(Workbook)이 열려있는지 확인하는 법

by 한국수달보호협회장 2024. 5. 15.

 

 

 

출처 : 엑셀 바이블 486p

 

 

Function IsFileOpen(파일 As String) As Boolean

  Dim 열린파일 As Workbook
  
  On Error Resume Next
  
    Set 열린파일 = Workbooks(Dir(파일))
    IsFileOpen = (Err.Number = 0)
    
End Function

 

파일이 열려있을 경우 :

→ Dir(파일)이 파일명을 뱉어냄 

→ 열린파일이라는 변수에 Workbooks 개체가 맞게 들어감

→ 에러 발생안함

→ Err.Number = 0이 됨

→ IsFileOpen이 True가 됨

 

파일이 열려있지 않을경우(파일이 존재하지 않는 경우 등등):

→ 열린파일이라는 변수에 Workbooks 개체가 안 들어감 [★밑에설명]

→ 에러 발생함

→ Err.Number = 0이 아니게 됨

→ IsFileOpen이 False가 됨

 

 

파일이 열려있지 않을때가 잘 이해가 안되는데 왜 그럴까? 파일이 안열려있으면 왜 열린파일이라는 변수에 Workbooks(Dir(파일))이 할당이 안되는건지....

 

곰곰히 생각해보니까 열려있지도 않은 파일을 변수로 이용할 수는 없는게 당연하다.

자연스럽다고 해야되나?

 

그냥 이해가 안되면 지역조사창을 켜서 한번 확인해보는 것도 도움이된다.

 

1) 열려있는 파일을 가져올 경우

 

2) 열려있지않은 파일을 가져올 경우

 

 

 

 

 

 

 

니꾸 엑셀블로그도 유사한 코드가 있다

 

https://blog.naver.com/rosa0189/60135538368

 

(252) Workbook이 열려있는지 확인 (엑셀 VBA 매크로)

workbook이 열려 있는지 확인하는 코드. is_wkb_Open.xlsm은 열려있는 파일이므로 참, 열려있지 ...

blog.naver.com

 

 

workbook이 열려 있는지 확인하는 코드. is_wkb_Open.xlsm은 열려있는 파일이므로 참, 열려있지 않은 workbook은 거짓 반환.

 

Option Explicit
Function is_wkb_Open(wkbName As String) As Boolean

    Dim wkb As Workbook                   'workbook을 넣을 변수
   
    On Error Resume Next                   '에러 발생시에도 코드 계속 진행
    Set wkb = Workbooks(wkbName)    'wkbName을 개체변수에 넣음
   
    If Not wkb Is Nothing Then              '(만일 변수에 넣었는데)에러 발생하지 않으면
        is_wkb_Open = True                  '그 workbook은 열려있는 것이므로 참값 반환
    Else                                            '아니면
        is_wkb_Open = False                '거짓을 반환. 찾는 workbook이 열려있지 않음.
    End If
   
End Function