treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

OfficeのUpdateでAccessアプリが動作しなくなる。

9月下旬、正確には9月25日くらいから、Access 2016でアプリが動作しなくなるという症状に悩まされ今日に至ります。

本日は途中の検証した経過やとりあえずの対処法はすっ飛ばして、とりあえず動作していた時の状態に戻すための方法、Access 2016のバージョンをコントロールする方法についてご報告いたします。

まずは症状から。

Windows10のPCでAccess 2016を使っています。ただ、Access 2016を使っている環境で特定の作りがされたAccessアプリでは共通して症状がおこるようです。

f:id:treedown:20170928232513p:plain
画像が、ちょっと低解像度のものしか取得できてなかったので、エラーメッセージ全文を。

エラー メッセージ :
「データベースに含まれている VBA プロジェクトを読み取れないため、データベースを開くことができません。VBAプロジェクトを削除する必要があります。VBAプロジェクトを削除すると、モジュール、フォーム、およびレポートからすべてのコードが削除されます。データベースを開いてVBAプロジェクトを削除する前に、バックアップコピーを作成することをおすすめします。」

とりあえずここはキャンセルの連打で抜けることができます。

ふーむ。

ソースは失念しましたが、Access 2016のバージョン1708の更新によって日本語のモジュール名やフォーム名を持つOfficeファイルを開くと発生する、という症状のよう。

ここを見ると

更新プログラム チャネル リリースのバージョン番号とビルド番号 - Office サポート
バージョン 1708 (Build 8431.2079)が2017年9月のアップデート、時期的にもこの辺が"それっぽい"感じがします。

PC間で比較

運よく、正常動作するPCが残っていたので、Access2016のバージョン(ビルド)を比較してみました。

問題が起きない方のバージョン画面

f:id:treedown:20170928232619p:plain
問題が起きる方のバージョン画面

f:id:treedown:20170928232637p:plain
バージョン1707はバージョンが起きない方、という裏がとれました。(ついでに症状が起きないようにOffice更新オプションを無効化にしておいてと)
ここからとりあえず問題が起きる方のバージョンを巻き戻しする方法をやってみます。
まずOfficeの更新を無効にします。

f:id:treedown:20170928232720p:plain
バージョンの下に「Office更新プログラム」のボタンがあります。ここの「更新オプション」のボタンを押下して「更新を無効にする」をクリックします。

f:id:treedown:20170928232740p:plain
そうすると、「この製品は更新されません」という表示に代わります。

更新が無効になれば、バージョンダウンしても自動的にバージョンアップされることがなくなるだろう、という目論見です。後ろ向きですが現時点では、本現象への有効な回避策が存在しないため、修正の修正を待つ、という待ちの姿勢でしばらく粘ってみることにします。

バージョンを巻き戻しするため、詳細なバージョン番号を調べます。
問題が起きない方のバージョンでは

f:id:treedown:20170928232831p:plain

バージョン番号1707(16.0.8326.2107)と表記されています。
一方問題が起きる方のバージョンは、

f:id:treedown:20170928232848p:plain
バージョン1708(16.0.8431.2046)と表記、バージョン1708(16.0.8431.2046)のAccessが稼働する環境で、問題が起きない方のバージョン番号1707(16.0.8326.2107)にバージョンダウン=巻き戻します。

対処法・手順

まず、バージョンを調べるために起動していたOfficeはすべて終了させます。(そのほかのアプリケーションも念のため終了します。)

バージョン1708(16.0.8431.2046)のAccessが稼働する環境で、コマンドを実行するために、まずコマンドプロンプトを管理者で実行します。(コマンドプロンプトのウインドウタイトルに「管理者」と表記されている必要があります。)
実際の実行画面がこんな感じ。

f:id:treedown:20170928232947p:plain
見づらいのでテキストで。
-------------------------------------------------------------------------------
> cd %programfiles%\common files\Microsoft Shared\Clicktorun

> officec2rclient.exe /update user updatetoversion=16.0.8326.2107

-------------------------------------------------------------------------------
cdコマンドで「%programfiles%\common files\Microsoft Shared\Clicktorun」にカレントディレクトリ移動します。
この環境では「C:\Program Files\Common Files\microsoft shared\ClickToRun」に移動することになります。つまり「officec2rclient.exe」ファイルが存在するフォルダに移動しています。

次いで、officec2rclient.exeをオプション付きで実行します。オプションの「updatetoversion=」に続けて、先ほど調べた問題ない方のバージョンを指定します。巻き戻したいバージョン番号を指定すると、そのバージョンに戻る、ということですね。

コマンドを実行すると、以下の画面が表記されます。

f:id:treedown:20170928233023p:plain
待ちます。早く終わらないかな、はやる気持ちを抑えて待ちます。
画面が変わりましたが、まだ終わりません。

f:id:treedown:20170928233039p:plain
すべての処理が終了すると、画面が消えました。終了メッセージは出なかったような記憶があります。
バージョンの巻き戻し処理が完了したのち、再度Office(ここではAccess2016)を起動してバージョンを確認しました。

f:id:treedown:20170928233101p:plain
おお、無事指定した旧バージョンに戻っています。
当然旧バージョンに戻ればエラーなく(以前と同様なので)使うことができました。

更新プログラムの自動更新は、「この製品は更新されません」というままでひとまず経過観察です。セキュリティ更新じゃなければしばらくこのままでのいいのですが。

※追記:

コメント欄でいただきました

「こちらのとおりにverを古くしてバックアップファイルからフォームをコピーして動くようになりました。」

と記載があるように、フォームは破損している可能性が高いのでバックアップファイルなどの正常なフォームファイル(アプリのファイル)をコピーしてくる必要があります。

実際、確かに当方でもフォームファイルはバックアップから復旧させましたね。