ピボットテーブルのバージョンを指定しないとどうなる?(失敗談)

定期的に、ピボットテーブルをマクロで作成したくなることがある。そこで試しにマクロの記録で作ってみて、少し整理すると、このような記述になる。

Sub Test()

    Dim Tb As ListObject
    Set Tb = ActiveSheet.ListObjects(1)

    Dim Sh As Worksheet
        Sheets.Add
    Set Sh = ActiveSheet
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                      SourceData:=Tb, _
                                      Version:=6).CreatePivotTable TableDestination:=Sh.Cells(3, 1), _
                                                                   TableName:="ピボットテーブル2", _
                                                                   DefaultVersion:=6
End Sub

この中の「Version」が、なかなか厄介だ。
Excelのバージョンが混在する環境においては、例えば

  1. Excel2013で、マクロの記録で作成したものを編集する。
  2. Excel2010端末に利用者に渡す。
  3. バージョン違いでエラー発生。

を何度か経験している。

そこで、今まではExcelのバージョンを確認したうえで、対応するピボットテーブルのバージョンで作成することでエラーを回避していた。
docs.microsoft.com

そして、ふと閃いた。バージョンを指定しないで作成したら、どうなるのだろう?早速やってみた。

Sub Test()

    Dim Tb As ListObject
    Set Tb = ActiveSheet.ListObjects(1)

    Dim Sh As Worksheet
        Sheets.Add
    Set Sh = ActiveSheet
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                      SourceData:=Tb).CreatePivotTable TableDestination:=Sh.Cells(3, 1), _
                                                                       TableName:="ピボットテーブル2"
End Sub

何だか、できたような気がする。
f:id:Infoment:20190221223653p:plain

何だ、こんなに簡単なことだったのか。今までの苦労は何だったのか。
でも心配なので、作成したピボットテーブルのバージョンを確認してみた。

MsgBox Sh.PivotTables(1).Version

f:id:Infoment:20190221224844p:plain

バージョンは、「3」とでた。
あれ?「6」だったのでは?
元のコードで試してみる。
f:id:Infoment:20190221225314p:plain

確かに「6」だ。

というわけで、前言撤回。
バージョン指定を省いての運用は、もう少し詳細を調べて見極めてからにします。

参考まで。