배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   업그레이드하시겠습니까?
제목:   업그레이드하시겠습니까?
     
 

새 페이지 1

  STEP> 업그레이드하시겠습니까?

프로그램을 한번 설치하고 나면 조금씩 기능이 개선된 업그레이드 버전이 나오기 마련입니다. 그리고 지금의 프로그램을 업그레이드하려면 업그레이드 팩키지가 담긴 CD를 받아 설치하거나 인터넷을 통해 업그레이드를 합니다.

특히 바이러스가 매일 창궐하는 상황에서 백신 프로그램은 발 빠르게 백신엔진을 업그레이드 하기 위해 인터넷을 통한 업그레이드를 합니다.

오늘은 자신이 만든 프로그램을 사용자가 업그레이드할 수 있도록 만드는 예를 하나 만들어 보려고 합니다. 대강의 그림을 그리자면 다음과 같겠죠.

1.
 인터넷을 통해 업그레이드된 모듈을 다운로드 받습니다.
2.   Visual Basic 프로젝트를 나타내는 VBProject 개체를 이용하여 모듈을 교체
합니다.

인터넷을 통해 무언가를 다운로드 한다면 URLDownloadToFile() API함수와 이를 이용한 Function을 사용합니다.


//---------------------------------------------------------------
// Name Function DownloadFile(...)
// Author 곽승주
// Date 2002-07-12
// Description 웹브라우저 없이 지정한 URL로부터 파일을 다운로드
// Arguments
// ... URL As String - 다운로드할 URL
// ... LocalFilename As String - 자신의 PC에 저장할 이름
// Returns 0:다운로드 성공, 기타:실패
//---------------------------------------------------------------

Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long

Function DownloadFile(URL As String, LocalFilename As String) As Boolean
    Dim lngRetVal      As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
    If lngRetVal = 0 Then DownloadFile = True
End Function
 

Function URLDownloadToFile(...) API함수에서는 다운로드하려는 파일의 URL과 이름, 하드디스크에 저장할 파일경로 및 이름을 주면 됩니다.  

Function DownloadFile(...)함수에서는 다운로드가 성공했는가 아니면 실패하였는가를 알려줍니다. 사실 얘는 URLDownloadToFile()함수를 포장한 것에 불과합니다. 

VBProject 개체는 Visual Basic 프로젝트를 가리키는 개체입니다. 그리고 그 하위에 있는 VBComponents 컬렉션은 프로젝트에 들어 있는 구성 요소(모듈,폼,시트,워크북)의 컬렉션을 돌려줍니다. 

가령 다음의 프로시져는 현재 VBA프로젝트를 구성하는 컴포넌트 이름을 보여줍니다.

Sub ShowComponent()
    Dim component
    For Each component In ThisWorkbook.VBProject.VBComponents
        Debug.Print component.Name
    Next
End Sub

VBComponents의 Remove와 Import는 구성요소를 제거하거나 추가하는 메소드입니다.

아래의 Sub UpgradeModule()은 제 개인 홈페이지에 저장된 Module2.Bas를 DownloadFile()함수를 사용하여 다운로드하고 VBComponents의 Remove와 Import를 이용하여 기존의 Module2를 제거하고 다시 업그레이드된 Module2를 가져오는 작업을 합니다.

Sub UpgradeModule()
    Dim sFile       As String

    sFile = ThisWorkbook.Path & "\Module2.bas"
    If DownloadFile("http://my.dreamwiz.com/sjoo/Module2.bas", sFile) Then
        With ThisWorkbook.VBProject
            // 기존의 모듈을 지운다
            VBComponents.Remove .VBComponents("Module2")

            // 새로운 모듈을 추가한다
            VBComponents.Import sFile
        End With
        MsgBox "업그레이드 완료" & Space(10), vbInformation
    Else
        MsgBox "업그레이드 실패" & Space(10), vbCritical
    End If

End Sub

업그레이드에 실패한다면 해당 파일이 없거나 인터넷에 연결되어 있지 않는 여러 가지 이유에서 일 겁니다.