連載
» 2017年10月04日 05時00分 公開

山市良のうぃんどうず日記(107):最新Office 365でマクロ/VBAの問題が発生――「Semi-Annual Channel(半期チャネル)」で助かったという話 (2/2)

[山市良,テクニカルライター]
前のページへ 1|2       

簡単なExcelマクロで問題を再現してみる

 この問題の影響を受けるVBAプロジェクトを含む簡単なExcelファイルを作成してみました。上書き保存のコードを実行するボタンをシート上に配置しただけのものです。この問題の影響を受けるように、既定のモジュール名「Module1」を「私のモジュール」に変更します(画面3)。準備はこれだけです。

画面3 画面3 バージョン1708の問題の影響を受けるVBAプロジェクト。既定のモジュール名「Module1」を「私のモジュール」に変更しただけ

 この問題の影響を受けないExcel 2016(バージョン1708より前のバージョン)では、このボタンは正しく機能します。バージョン1708のExcel 2016で開くと、セキュリティ警告の「コンテンツの有効化」をクリックしたときに、画面4のように「このブック内のVisual Basic for Applications(VBA)マクロは破損しており、削除されました。」と表示され、その後、「'ファイル名'の一部の内容に問題が見つかりました。可能な限り内容を回復しますか?」と表示され、「はい」をクリックすると画面5のように表示されます。

画面4 画面4 「コンテンツの有効化」をクリックすると、このように表示される
画面5 画面5 VBAプロジェクトのコードが削除された状態でファイルが開かれる。この時点ではオリジナルのExcelファイルは変更されていない(「ライセンスのない製品」はこの問題とは関係ありません

 ここまでは、VBAプロジェクトのコードが削除された状態で、ファイルが修復され開きます。そのためボタンは機能せず、マクロの実行はエラーになります。Excelの場合、修復されたファイルはメモリ上にあるので、オリジナルのExcelファイル内のVBAプロジェクトはまだ残っています。ただし、修復されたファイルをオリジナルのファイルに上書き保存してしまうと、VBAプロジェクトのコードは失われてしまうことに注意しましょう(画面6)。

画面6 画面6 修復されたファイルをオリジナルのファイルに上書き保存してしまうと、VBAプロジェクトは失われてしまう

 Accessの場合は、エラーメッセージで[OK]ボタンをクリックしてデータベースを開いてしまうと、AccessデータベースからVBAプロジェクトのコードが削除されてしまう可能性があります。筆者が簡単に作成したAccessデータベースでは、削除されてしまいました(画面7)。そうなると、ファイルのバックアップコピーがなければ、復元することはできないでしょう。いずれにせよ、この問題に遭遇したときに対応を間違えると、大事なコードが失われてしまうということです。

画面7 画面7 Accessデータベースの場合、この画面で[OK]ボタンをクリックすると、オリジナルのファイルからコードが削除されてしまう可能性があるので注意。[キャンセル]をクリックしてもアプリが閉じることはなく、メッセージがループするだけだったので、「タスクマネージャー」から終了する必要があった

 筆者は、プログラムのコード(モジュール名、ユーザー定義関数名、変数名などを含め)に日本語を使う(実際に使えるかどうかは別として)なんてことは考えもしませんでした。エンドユーザーでも簡単なプログラム開発(マクロなど)ができるVBA環境となると、自分が後で分かりやすいように、あるいは同僚に伝えやすいように、日本語でモジュール名を整理するということは、どうやらよくあることのようです。影響しない人には全く関係ありませんが、コードに日本語を積極的に使ってきた企業があるとしたら、今回の問題は重大事かもしれません。

 少なくとも企業は、Semi-Annual Channelで運用するべきでしょう。文字通り、一部のクライアントでSemi-Annual Channel(Targeted)で運用し、互換性問題が発生しないかどうかを継続的に確認していれば、大事に至らずに済みます。

最新情報:Office 365のリリース情報

 「Office 365 client update channel releases」(Office TechCenter)によると、この問題の修正を含むバージョン1708(ビルド8431.2094)がMonthly Channel向けにリリースされている模様です。ただし、2017年10月4日8時30分(日本時間)現在、筆者の環境ではこの更新を検出できません。


最新情報:Officeサポートチームのブログ更新

 日本のOfficeサポートチームのブログ(https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/08/23/ver1708-issue-japanesenamevbamodule/)が更新され、Monthly Channel(コンシューマー向け、およびOffice 365 ProPlusを除く企業向けの既定)向けにこの問題を修正した更新プログラムについての説明が追加されています。

 2017年10月4日時点では、通常の方法では修正されたバージョンに更新されることはありません。更新するには、コマンドラインでの操作が必要です。Semi-Annual Channel(Targeted)向けには提供されていません。また、まだ広く一般に提供されていないということは、十分にテストされていないと考えるべきでしょう。企業の場合は、問題を回避したい場合にのみ、小規模にテストした上で更新することをお勧めします。

 2017年10月5日時点で、Monthly Channelの自動または手動更新により、修正されたバージョン1708(ビルド 8431.2094)に更新可能です。この問題を回避するために、過去のバージョンにロールバックし、自動更新を「無効」にしていた場合は、再び「有効」に戻すことが可能です。Semi-Annual Channel(Targeted)向けの修正されたバージョンの提供については、日本のOfficeサポートチームのブログやOffice 365のリリース情報で最新情報を確認してください。


筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。


前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。