Office関連

アドインやテンプレートのバージョンチェックを行うVBAマクロ

色々なアプリケーションに実装されている、「最新バージョンの確認」機能、VBAマクロのアドインやテンプレートではどのように実装したらよいのか、簡単な処理を考えてみました。

ChkVersion_01

色々な方法があると思いますが、まず思いついたのは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でインターネット上のファイルをダウンロードする方法をまとめてみました。」参照)。

このあたりの細かい動作は、自分の好みで実装すれば良いかと思います。

指定したセル範囲をUTF-8やEUC-JP等のテキストファイルとして出力するExcelアドイン前のページ

2014年12月の人気記事次のページ

関連記事

  1. Office関連

    [VBA]ファイルタブ(Backstage ビュー)の表示を禁止する。

    数年前ホームページで「ファイルタブボタンのクリックを禁止する(Offi…

  2. Office アドイン

    [Office用アプリ]アプリ開発コンテストの案内

    2013/9/9 追記:コンテストの受賞者が発表されました。おかげ…

  3. Office関連

    PhpSpreadsheetを使ってPHPからExcelファイルを出力してみる。

    一年半ほど前、「PHPWord」を使ってPHPからWordファイルを出…

  4. Office関連

    VBAから扱えるDLLをC#で書いてみる。

    以前書いた記事でSharpDevelopを使ってExcel用のCOMア…

  5. Office関連

    [リボン・カスタマイズ]グループの表示・非表示をトグルボタンで切り替える。

    数年前に書いた記事に下記コメントをいただきました。Excelに…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP