色々なアプリケーションに実装されている、「最新バージョンの確認」機能、VBAマクロのアドインやテンプレートではどのように実装したらよいのか、簡単な処理を考えてみました。
色々な方法があると思いますが、まず思いついたのはXMLを使う方法。
下記のようなXMLをインターネット上の適当な場所に保存(下記例ではhttp://localhost/update.xml)しておいて、マクロからそのXMLを読み込みバージョンの比較を行う、というものです。
■ update.xml(UTF-8 BOM無し)
<?xml version="1.0" encoding="utf-8"?> <update> <apps> <app id="AP001"> <version>1.0.1</version> <url>http://localhost/apps/AP001.html</url> </app> </apps> </update>
■ 標準モジュール
Option Explicit Private Const AppID As String = "AP001" 'アプリケーション識別用のID Private Const AppVer As String = "1.0.0" '現バージョン Private Const ChkXmlUrl As String = "http://localhost/update.xml" 'バージョンチェック用XML Private Sub ChkVersion() 'アプリケーションのバージョンチェック Dim xml As String Dim ver As String Dim url As String xml = "": ver = "": url = "" '初期化 With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", ChkXmlUrl, False .SetRequestHeader "Content-Type", "application/xml; charset=UTF-8" .Send Select Case .Status Case 200: xml = .ResponseText Case Else: GoTo Err End Select End With If Len(Trim(xml)) < 1 Then GoTo Err With CreateObject("MSXML2.DOMDocument") .async = False If .LoadXML(xml) = True Then With .SelectNodes("/update/apps/app[@id='" & AppID & "']") If .Length > 0 Then On Error GoTo Err ver = .Item(0).SelectSingleNode("version").Text On Error GoTo 0 If Len(Trim(ver)) > 0 Then If VerToNum(AppVer) < VerToNum(ver) Then Select Case MsgBox("現在お使いのアプリケーションは最新バージョンではありません。" & vbCrLf & _ "最新バージョン [" & ver & "] のダウンロードページを表示しますか?", _ vbQuestion + vbYesNo + vbSystemModal) Case vbYes On Error GoTo Err url = .Item(0).SelectSingleNode("url").Text On Error GoTo 0 If Len(Trim(url)) > 0 Then With CreateObject("InternetExplorer.Application") .Visible = True .Navigate url End With Else GoTo Err End If Exit Sub End Select Exit Sub Else MsgBox "最新バージョンのアプリケーションです。", vbInformation + vbSystemModal Exit Sub End If Else GoTo Err End If Else GoTo Err End If End With Else GoTo Err End If End With Exit Sub Err: MsgBox "バージョンチェックに失敗しました。" & vbCrLf & _ "処理を中止します。", vbCritical + vbSystemModal End Sub Private Function VerToNum(ByVal ver As String) As Long 'アプリケーションのバージョン番号に入っている[.]を削除 VerToNum = CLng(Replace(ver, ".", "")) End Function
上記マクロは、インターネット上のXMLから最新バージョンの番号を読み取り、定数として保持していた番号より新しければ、アプリケーションのダウンロードページを開くという、非常にシンプルなものです。
XMLを下記のようにすれば、複数のアプリケーションのバージョンを一つのファイルで管理することもできます。
<?xml version="1.0" encoding="utf-8"?> <update> <apps> <app id="AP001"> <version>1.0.1</version> <url>http://localhost/apps/AP001.html</url> </app> <app id="AP002"> <version>2.0.0</version> <url>http://localhost/apps/AP002.html</url> </app> <app id="AP003"> <version>0.0.5</version> <url>http://localhost/apps/AP003.html</url> </app> </apps> </update>
また、上記XMLではダウンロードページのURLを指定していますが、ファイルのダウンロード先を直接指定することで、マクロから最新バージョンのファイルをダウンロードすることもできるでしょう(「VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。」参照)。
このあたりの細かい動作は、自分の好みで実装すれば良いかと思います。
この記事へのコメントはありません。