VBA 실행 파일 찾기 :: GetFileApplication 함수 사용법 및 전체 코드

선택한 파일의 실행프로그램을 찾아 반환하는 GetFileApplication 함수의 사용법 및 전체명령문 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2020. 10. 12. 02:20
URL 복사
메모 남기기 : (6)

엑셀 VBA 실행 파일 찾기 :: GetFileApplication 함수 사용법

함수 구문
= GetFileApplication ( 파일경로 )
인수 설명
인수 설명
파일경로 실행 프로그램을 찾을 대상 파일의 경로입니다.
함수 사용예제
  • GetFileApplication ( "C:\Users\Oppadu\Desktop\예제.txt" )
    '// "C:\Windows\system32\NOTEPAD.EXE" 를 반환합니다.
  • GetFileApplication ( "C:\Users\Oppadu\Desktop\예제.xlsx" )
    '// "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" 를 반환합니다.
  • GetFileApplication ( "C:\Users\Oppadu\Desktop\없는파일.xlsx" )
    '// "존재하지 않는 파일" 오류를 반환합니다.
  • GetFileApplication ( "C:\Users\Oppadu\Desktop\엑셀설치안됨.xlsx" )
    '// 엑셀을 실행할 프로그램이 없을 경우 "실행 파일 없음" 오류를 반환합니다. 
GetFileApplication 함수 설명

GetFileApplication는 VBA 매크로를 이용한 실행 파일 찾기 함수입니다. 예를들어, "메모장.txt"를 파일경로로 지정하면 메모장 실행 파일인 Notepad.exe의 파일경로를 반환합니다. (얘: C:\Windows\system32\NOTEPAD.EXE)

VBA 실행 파일 찾기 사용예제
특정 파일의 실행파일(.exe)을 찾아 반환합니다.

VBA로 파일을 실행하기 위한 OpenFile 명령문을 보다 다양한 방법으로 사용할 수 있도록 도와주는 필수 보조 명령문이며, 이외에 실행 파일과 관련된 다양한 명령문과 응용할 수 있습니다.

실행 파일 찾기 결과값은 사용중인 PC 설정에 따라 달라집니다. 예를들어, 그림파일의 실행 프로그램 기본값을 '그림판'으로 설정했다면, 명령문은 PAINT.EXE 를 결과값으로 반환합니다. 이외에 다른 프로그램일 경우, 실행 파일 찾기 함수는 기본값으로 설정 된 해당 프로그램의 파일경로를 반환합니다.(예: 알씨, 사진 등)

엑셀 실행 파일 찾기 기본 설정 변경
실행 파일 경로는 사용중인 PC 설정에 따라 달리질 수 있습니다.
그 외 참고사항
  • 입력한 파일경로가 올바르지 않거나, 존재하지 않는 파일경로일 경우, 실행 파일 찾기 함수는 "존재하지 않는 파일" 오류를 반환합니다.
  • 해당 파일을 실행할 실행프로그램이 없을 경우, "실행 파일 없음" 오류를 반환합니다.
  • 입력한 파일 경로가 260자 이상일 경우, "글자수 초과" 오류를 반환합니다.
  • 실행파일 찾기 함수는 내장함수가 아닌 매크로를 사용한 VBA 사용자 지정함수입니다. 따라서 매크로 편집창에 아래 명령문을 복사/붙여넣기 한 뒤 사용합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [엑셀VBA함수] GetFileApplication :: 실행 파일 찾기 함수
    예제파일

엑셀 실행파일 찾기, GetFileApplication함수의 동작원리

GetFileApplication 함수 전체 명령문
Option Explicit
 
#If VBA7 Then
' https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-findexecutablea
Private Declare PtrSafe Function FindExecutable& Lib "shell32.dll" Alias "FindExecutableA" _
                                                                        (ByVal lpFile As String, _
                                                                        ByVal lpDirectory As String, _
                                                                        ByVal lpResult As String)
#Else
Private Declare Function FindExecutable& Lib "shell32.dll" Alias "FindExecutableA" _
                                                                        (ByVal lpFile As String, _
                                                                        ByVal lpDirectory As String, _
                                                                        ByVal lpResult As String)
#End If
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com/)
'■ GetFileApplication 함수
'■ 지정한 경로의 파일을 실행할 실행프로그램(*.exe)을 찾아 반환합니다.
'■ 인수 설명
'_____________sFile : 실행 프로그램을 찾을 파일의 파일경로입니다.
'###############################################################
 
Public Function GetFileApplication(ByVal sFile As String) As String
 
Dim i As Long: Dim E As String
 
If Dir(sFile) = "" Or sFile = "" Then GetFileApplication = "존재하지 않는 파일": Exit Function
If Len(sFile) > 260 Then GetFileApplication = "글자수 초과": Exit Function
 
' Windows 최대 허용 파일경로는 260자 입니다.
E = String(260, Chr(0))
 
i = FindExecutable(sFile, vbNullString, E)
 
' 실행 프로그램 있을 경우 32보다 큰 값을 반환합니다.
If i > 32 Then
    GetFileApplication = Left$(E, InStr(E, Chr$(0)) - 1)
Else
    GetFileApplication = "실행 파일 없음"
End If
 
End Function
명령문 동작원리 단계별 알아보기
  1. 실행파일 찾기를 위한 Windows 함수인 FindExecutableA 함수를 호출합니다.
    #If VBA7 Then
    ' https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-findexecutablea
    Private Declare PtrSafe Function FindExecutable& Lib "shell32.dll" Alias "FindExecutableA" _
                                                                            (ByVal lpFile As String, _
                                                                            ByVal lpDirectory As String, _
                                                                            ByVal lpResult As String)
    #Else
    Private Declare Function FindExecutable& Lib "shell32.dll" Alias "FindExecutableA" _
                                                                            (ByVal lpFile As String, _
                                                                            ByVal lpDirectory As String, _
                                                                            ByVal lpResult As String)
    #End If
  2. 발생할 것이라고 예상되는 오류를 처리하기 위한 명령문을 추가합니다.
    If Dir(sFile) = "" Or sFile = "" Then GetFileApplication = "존재하지 않는 파일": Exit Function
    If Len(sFile) > 260 Then GetFileApplication = "글자수 초과": Exit Function
  3. 파일 경로 뒤에 NullString(=Chr(0)) 을 추가하여 윈도우에서 허용하는 최대 글자수의 파일경로로 변환합니다.
    ' Windows 최대 허용 파일경로는 260자 입니다.
    E = String(260, Chr(0))
  4. FindExecutableA 함수를 사용하여 해당 파일의 실행 파일을 찾습니다.
    i = FindExecutable(sFile, vbNullString, E)
  5. FindExecutableA 함수의 결과값이 32 초과일 경우, 실행 파일 경로를 반환한 뒤, 실행파일찾기 명령문을 종료합니다.
    ' 실행 프로그램 있을 경우 32보다 큰 값을 반환합니다.
    If i > 32 Then
    GetFileApplication = Left$(E, InStr(E, Chr$(0)) - 1)
    Else
  6. 결과값이 32 이하일 경우, 실행파일이 없다는 뜻이므로 "실행 파일 없음" 오류를 반환한 뒤, 실행파일찾기 명령문을 종료합니다.
    ' 결과값이 32미만일 경우, '실행파일 없음' 오류를 반환합니다.
        GetFileApplication = "실행 파일 없음"
    End If
4.5 4 투표
게시글평점
6 댓글
Inline Feedbacks
모든 댓글 보기
6
0
여러분의 생각을 댓글로 남겨주세요.x