VBAのツールが別のバージョンで動かなくなってしまった・・・
VBAの互換性問題を解決する方法は?何をすればいいの?
VBAの互換性問題が起きないように予防する方法はないかな?
VBAで自動化ツールを作って納品したときに、納品先のExcelバージョンが違う場合に起こるエラーが互換性問題です。互換性を意識せずにツールを作ってしまうと、大規模なテストや大幅な修正が必要になるケースがよくあります。
ただ、互換性を最初から意識してツールを作っている人は少ないのではないでしょうか。
こんにちは!フリーランスエンジニア兼テックライターの脇坂です。
この記事では、VBAの互換性問題で悩む方向けに、VBAの互換性問題の解決・予防方法を解説します。
互換性問題を事前に意識して開発できるようになると、新しいバージョンが出たときも対応しやすいため、覚えておくのがおすすめです!
この記事はこんな人のために書きました。
- VBAで1つでもツールを作ったことがある方
- VBAのツール納品時に互換性問題で苦労したことがある方
VBAの互換性問題が起こる原因
まず、VBAの互換性問題が起こる原因について解説します。
VBAで互換性問題が起こる原因は、大きく分けて以下の2つです。
- Excelのバージョンの違い
- Windowsのバージョンの違い
Excelのバージョンが違うことにより、使える機能、関数、参照設定の有無によってツールが動かないケースはよくあります。事前に動作を確認できていれば問題ありませんが、ツールのテストが終盤に差し掛かった時に互換性問題でツールが動かなくなると、事故にもつながってしまいます。
また、Windowsのバージョンの違いによって動かなくなるケースもあります。WindowsAPIを使った処理を使う場合は要注意ですね。
VBAの互換性問題が起こった時の対処方法
VBAの互換性問題が起こるとツールが動かなくなってしまうため、原因を探すのが難しいと感じる方も多いのではないでしょうか。
そんな方向けに、VBAの互換性問題が起こった時の対処方法について解説します。
VBAの互換性問題を対処するためには、エラーが起こっている原因を調べないといけません。エラーの原因を調べる方法は大きくわけて次の3つあります。
- エラーメッセージから特定する
- 使っている機能から特定する
- 機能を分割してテストを行う
それぞれ詳しく解説しますね。
エラー情報を使って調べる
まず、エラー情報を使って調べる方法についてです。互換性問題に限らず、エラーが起こった時に対処する方法ですね。
たとえば、エラーになると次のようなメッセージが表示されます。
これは互換性のエラーではないですが、エラーメッセージ、エラー番号などが表示されていますよね。
「VBA エラーメッセージ」で調べるだけでなく「VBA エラー エラー番号」のように、エラー番号もいれて調べるのがおすすめです。まずは、エラーが起きてる原因がエラー情報から読み取れないか?を調べるのです。
エラーが出る例、出たときの具体的な対処方法のサンプルとして、以下記事がおすすめです。直接的に関係ないかもしれませんが、エラーの調べ方を含めて解説しているため、新しい発見があると思います!
使っている機能が旧バージョンにもあるか確認
エラー情報からエラーの原因が特定できればOKですが、特定できないときもあります。そんなときは、Excelの機能の違いから調べることがおすすめです。
「Excel 2007 2010 機能 違い」「Excel 2010 2013 機能 違い」 など、実際に動かすバージョンと作ったExcelのバージョンをの違いをExcelの機能レベルで調べる方法です。たとえば、Excelのリボンの機能は、Excel2007から始めて導入されています。そのため、Excel2007よりも前のバージョンで、リボンを使ったVBAを組んだツールを動かそうとしても動きません。
また、Excelの機能だけでなく、「参照設定」が旧バージョンで存在しないケースもよくあります。VBEから参照設定を確認し、エラーになっている箇所がないか確認するのもおすすめです。詳細は以下に書いてあります。
このように、Excelの新しい機能を使っている処理がないか、立ち止まって調べてみるのがおすすめです!
機能を分割してテストを行う
ただ、エラー情報からもわからず、最新の機能を使っているかもよくわからない・・・という場合もありますよね。そんなときは、機能を分割してテストを行うことがおすすめです。
たとえば、次のような、CSVファイルのデータを使って、PDFの資料を作成するツールがあったとします。
- CSVファイルを選択する
- CSVデータを取り込む
- 取り込んだデータをもとに、PDFの資料を作成する
- 作成したPDFのデータの出力フラグを「済」に変更する
この場合は、1 ~ 4までの細かい処理をごとに、互換性問題が起きないか確認していくイメージです。ブレークポイントをてけてデバッグをしながら、具体的にエラーが起きている箇所を調べていく作業ですね。
細かい単位で処理を確認したいときはとくに、デバッグがとても便利です。デバッグのやり方については以下で詳しく解説しているので、見てみてくださいね!
VBAの互換性問題を起こさないための予防策
次に、VBAの互換性問題を起こさないための予防策について解説します。
使用するバージョンを確認する
まず、ツールを使うExcelのバージョンを確認しましょう。
Excelのバージョンがわかれば、事前に使用できない機能、関数などが調べやすくなりますよね。また、機能や関数だけでなく、参照設定を使う時は、事前に他のバージョンで動くか簡単なテストをしておくことで、ツール作成後に動かないという状況を避けることができます。
少なくとも、Excelのバージョン、Windowsのバージョンは確認しておきましょう。
【チェックポイント】
- Excelのバージョン、Windowsのバージョンを確認する
- 新機能、関数、参照設定を使う時は、対象バージョンで動くか確認する
可能な限り参照設定を使わない
対象のバージョンが「Excel2003 ~ 最新のExcelバージョンまで」のように広い場合、極力参照設定を使わないのがおすすめです。
参照設定を使うとき、使わないときのイメージは次のとおりです。
'■参照設定を使う時のイメージ Dim obj1 As XXXX Set obj1 = New XXXX '■参照設定を使わないイメージ Dim obj2 As Object Set obj2 = CreateObject("XXXX")
参照設定を使わなくても、CreateObjectを使えば同じ処理を作ることができます。開発効率は少し下がりますが、テストにかける時間が大幅に減るため、バージョンの幅が広い時はおすすめです。
まとめ
今回は、VBAの互換性問題を解決する方法・具体的な予防策について解説しました。
バージョンが違うExcelでツールを動かすケースはよくあります。互換性問題が起こる原因、解決策、予防策を知っておくだけで、対策はしやすくなるのではないでしょうか。
ぜひ、VBAの互換性問題に強くなって下さいね!