Excel - VBA

VBA로 Add-In(추가기능) 자동 업데이트 하기

EGTools 2023. 1. 6. 12:45

EGTools v3.5.0에 추가된 업데이트 기능의 VBA 소스입니다.

DownloadFromURL함수는 여기를 참고하세요.

 

다운로드한 파일은 임시로 사용자의 Downloads 폴더에 저장했다가 복사가 완료되면 삭제합니다.

사용중인 파일을 덮어씌우기 위해서 Add-In을 읽기 전용 상태로 바꾸는 것이 필요합니다.

사용자가 작성중인 파일이 있을 경우가 있어 Excel의 재시작은 사용자가 하도록 합니다. 

Public Const MyAddIn = "EGTools"
Public LastDocURL As String

Sub UpdateAddIn()
    Dim NewFile As String
    Dim ThisFullPath As String

    If Not ThisWorkbook.IsAddin Then Exit Sub
    ThisFullPath = ThisWorkbook.FullName
    
    Application.EnableEvents = False
    '// 다운로드할 주소를 지정하는 부분으로 다운로드할 배포파일의 URL을 지정해 줍니다.
    If LastDocURL = vbNullString Then getEGToolsVersion
    If LastDocURL = vbNullString Then
        MsgBox "새 버전을 확인하지 못했습니다."
        Exit Sub
    End If
        
    '// Registry에서 사용자의 Downloads Folder를 찾음
    NewFile = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\{374DE290-123F-4565-9164-39C4925E467B}")
    NewFile = Replace(NewFile, "%USERPROFILE%", Environ$("USERPROFILE")) & Application.PathSeparator & MyAddIn & ".xlam"
    NewFile = DownloadFromURL(LastDocURL, NewFile)
    If NewFile = vbNullString Then
        MsgBox "새 버전을 다운로드 하지 못했습니다."
        Exit Sub
    End If
    
    '// 기존 Add-In을 읽기 전용상태로 만들어 새파일로 덮어씌운 다음 다운로드한 파일 삭제
    ThisWorkbook.Saved = True        '//저장알림방지
    ThisWorkbook.ChangeFileAccess xlReadOnly    '//읽기 전용으로 변경하면 새버전 붙여넣기 가능하게 됨
    CreateObject("Scripting.FileSystemObject").CopyFile NewFile, ThisFullPath, True
    Kill NewFile

    '// 사용자 안내
    MsgBox "사용중인 파일을 모두 저장하시고," & vbNewLine & "Excel을 다시 시작하면 새 버전이 적용됩니다."
    Unload frmAbout    '// 이 기능이 User_Form에서 수행되었음
    Application.EnableEvents = True

End Sub