【入門編】【初心者】Application.Versionを判定し、古いPowerPointとモダンOfficeでサポートされていないSlideオブジェクトのプロパティを安全にスキップする条件分岐 – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの「見えない壁」を突破せよ:バージョン分岐でコードを一生モノにする技術

こんにちは。自動化の世界へようこそ。
日々、マクロの記録で生成された「脆いコード」と格闘していませんか?

PowerPoint VBAを触り始めると、誰もが一度はぶつかる壁があります。それは「自分のPCでは動くのに、同僚のPCでエラーが出る」という現象です。この原因の多くは、PowerPointのバージョンによる「オブジェクトモデルの非互換性」にあります。

今回は、どんな環境でも沈まない「堅牢なVBAコード」を書くための極意、`Application.Version` を使った安全なバージョン分岐について解説します。

—

なぜ「バージョン判定」が必要なのか?

PowerPointは長い歴史の中で進化してきました。例えば、Office 365(モダンな環境)で追加された新しいスライド切り替え効果や画像処理機能は、Office 2013や2016には存在しません。

古いPowerPointに対して「存在しないプロパティ」を呼び出そうとすると、VBAは即座に停止します。これを防ぐのが「実行環境のバージョンを読み取り、機能の実行をスキップする」という防衛策です。

—

実践:バージョン分岐の黄金パターン

まずは、最もシンプルかつ強力な書き方を覚えましょう。以下のコードは、現在のPowerPointバージョンを判定し、古い環境では特定の機能を安全にスキップするテンプレートです。

Sub SafePropertyExecution()
‘ 現在のPowerPointのバージョンを取得
‘ Office 2013: 15.0 / 2016: 16.0 / Microsoft 365: 16.0(以降)
Dim ver As Double
ver = CDbl(Application.Version)

‘ 例:バージョン16.0(Office 2016以降)でのみ実行したい処理
If ver >= 16.0 Then
‘ ここにモダンな環境でのみ動作するプロパティを書く
Debug.Print “モダンな機能へアクセスします。”

‘ 例:新しいスライド切り替え効果の適用など
‘ ActivePresentation.Slides(1).SlideShowTransition.Effect = …
Else
‘ バージョンが低い場合の代替処理、または警告
Debug.Print “古い環境のため、機能をスキップします。”
End If
End Sub

コードの解説

1. `Application.Version`: 現在のOfficeのビルドバージョンを文字列で返します。これを `CDbl` で数値に変換することで、大小比較(`>= 16.0` など)が可能になります。
2. `If…Then…Else`: これが「安全装置」です。新しいプロパティを呼び出す前に、この扉があることでエラーを未然に回避します。

—

陥りやすい罠:なぜエラーは起きるのか

初心者が最もハマるポイントは、「条件分岐を書いたつもりなのに、エラーが消えない」という現象です。

実は、VBAのコンパイル(コードの翻訳)は、実行前に行われます。もし存在しないプロパティをコードのどこかに書いていると、その行が実行されるかどうかに関わらず、VBAエディタが「そんなプロパティは存在しない!」と怒り出し、実行を拒否することがあります。

解決策:Late Binding(遅延バインディング)の活用

もし「どうしても古い環境と新しい環境で同じコードを共有したい」という場合は、オブジェクトの型を `Object` 型として宣言する「遅延バインディング」が有効です。

Sub RobustCode()
Dim mySlide As Object ‘ スライド型ではなく汎用的なObject型にする
Set mySlide = ActivePresentation.Slides(1)

On Error Resume Next ‘ 万が一エラーが出ても無視して進む

‘ 新しいプロパティにアクセス
mySlide.NewFeatureProperty = True

If Err.Number <> 0 Then
Debug.Print “この環境では新しい機能はサポートされていません。”
Err.Clear
End If

On Error GoTo 0 ‘ エラー監視を解除
End Sub

—

現場で役立つ「先輩の知恵」

  • バージョン番号の目安:
  • Office 2013 = 15.0
  • Office 2016 / 2019 / 365 = 16.0
  • コメントを刻め: バージョン分岐を書いた時は、「なぜこの分岐が必要か(例:2016未満では未実装のため)」を必ずコメントに残してください。半年後の自分は、今のあなたが書いたこの分岐の理由を忘れています。

最後に:自動化は「優しさ」から始まる

コードを書くとき、一番大切なのは「このマクロを使う誰か」や「未来の自分」への優しさです。エラーで止まるツールはただの重荷ですが、環境に合わせてしなやかに動作するツールは「資産」になります。

`Application.Version` を使いこなすことは、単なる技術ではなく、あなたの作成する自動化ツールを「プロの道具」へと昇華させる第一歩です。

さあ、恐れずにコードを書き換えてみてください。エラーが出ても大丈夫。それは、あなたのコードがまた一つ賢くなったという証拠ですから。

また次回の講義でお会いしましょう。質問があればいつでもどうぞ。

タイトルとURLをコピーしました