프로그램을 한번 설치하고
나면 조금씩 기능이 개선된 업그레이드 버전이 나오기 마련입니다. 그리고
지금의 프로그램을 업그레이드하려면 업그레이드 팩키지가 담긴 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 |
업그레이드에 실패한다면 해당
파일이 없거나 인터넷에 연결되어 있지 않는 여러 가지 이유에서 일 겁니다.
|