[Office2016深刻なエラー]VBAのモジュール名が日本語だとVBAが破壊される

#問題について掲載されているサイト
[Office 2016 バージョン 1708 以降で日本語の VBA モジュール名を含むファイルを開くとエラー](https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/08/23/ver1708-issue-japanesenamevbamodule/)
###質問が出ているサイト
[エラー『VBA プロジェクトを読み取れないため、データベースを開くことができません。』 ](https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/08/23/ver1708-issue-japanesenamevbamodule/)

### 上記サイトののMS の更新のおしらせ
2017/9/28 Update
現象発生条件の補足と、暫定対応でご案内している Office を以前のバージョンに戻す手順を、今回の問題向けにより簡略化したものを追記しました。また、本問題の修正に向けた作業に着手していますので、状況を更新しました。

2017/9/29 Update
Access のエラーメッセージの情報を追記しました。また、情報が多くなったため、記事構成を全体的に変更しました。

#
1. 現象

Office 2016 クイック実行形式向けの更新 バージョン 1708 (16.0.8431.xxxx)  において、モジュール名やフォーム名に日本語が設定された Office  のマクロ付きファイルを開こうとすると、以下のようなメッセージが表示され、正常に開くことができません。

 

##Excel 2016
###例1:
'ファイル名' の一部の内容に問題が見つかりました。可能な限り内容を回復しますか？
ブックの開発元が信頼できる場合は、[はい] をクリックしてください。
###例2:
このブック内の Visual Basic for Applications (VBA) マクロは破損しており、削除されました。
マクロの破損は現在のファイルに存在する可能性があります。
マクロを回復するには このファイルのバックアップ コピーを開いてください (バックアップ コピーがある場合) 。

##Access 2016
###例3 :
データベースに含まれている VBA プロジェクトを読み取れないため、データベースを開くことができません。データベースを開くには、VBA プロジェクトを削除する必要があります。VBA プロジェクトを削除すると、モジュール、フォーム、およびレポートからすべてのコードが削除されます。データベースを開いて、VBA プロジェクトを削除する前に、バックアップ コピーを作成することをお勧めします。
データベースのバックアップ コピーを作成する場合は、[キャンセル] をクリックしてください。バックアップ コピーを作成しないでデータベースを開き、VBA プロジェクトを削除する場合は、[OK] をクリックしてください。

##反応

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">モジュール名、フォーム名の日本語表記を英語表記にしたら復活しました。<a href="https://t.co/IDXfVcAQy7">https://t.co/IDXfVcAQy7</a> <a href="https://t.co/o8wY4YaPb6">https://t.co/o8wY4YaPb6</a></p>&mdash; タカハシノリアキVBA本発売中！ (@ntakahashi0505) <a href="https://twitter.com/ntakahashi0505/status/913647423594971137?ref_src=twsrc%5Etfw">2017年9月29日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">「今朝からMSアクセスのフォームが正しく表示されない」てな不具合対応る。Officeのバグでマクロやらの日本語対応でやらかしぽい。レシピ通りのOfficeのVer巻き戻しで対応る。<a href="https://t.co/aDZjnKMzG9">https://t.co/aDZjnKMzG9</a></p>&mdash; ぽげ田さん (@pogemuta) <a href="https://twitter.com/pogemuta/status/913648911994126336?ref_src=twsrc%5Etfw">2017年9月29日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">！週明け混乱注意！<br>AccessVBAにて日本語使ってる場合、エラーでYesしたらご臨終確定します<br><br>Office2016 Ver1708 以降で日本語のVBAモジュール名を含むファイルを開くとエラー <a href="https://t.co/1vfxiu8Z5e">https://t.co/1vfxiu8Z5e</a></p>&mdash; みき (@miki_x_jrc) <a href="https://twitter.com/miki_x_jrc/status/911816844884844544?ref_src=twsrc%5Etfw">2017年9月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

##詳細

2017/9/20 Update
この問題は、VBA モジュールの問題によって生じるため、***VBA を作成できるすべての Office アプリケーション (Excel / Word / PowerPoint / Access / Publisher / Project / Visio / Outlook)  で問題が生じます。***アプリケーションによって、VBA モジュールのエラーハンドリングが異なるため、詳細な動作は異なりますが、いずれも、***日本語のモジュール名、ユーザーフォーム名を含む VBAProject を読み込むことができず、マクロを実行できません***。その他、以下のような現象が発生します。

    ファイルのオープン時や、Visual Basic Editor の起動時にエラーメッセージが表示されます
    ***ファイルを保存すると、VBAProject が削除されます (上書き保存を行わないようご注意ください)***
    Word  については、日本語のモジュール名を含む VBAProject が含まれている場合、ファイルを上書き保存することができません
    Publisher については、日本語のモジュール名を含む VBAProject が含まれている場合、ファイルを開くことができません

2017/9/28 Update
補足) 本現象は、厳密には、モジュール名やフォーム名の末尾が日本語 (をはじめとする DBCS 文字) の場合に発生します。このため、例えば「フォーム1」(1 は半角数字) のように末尾が半角の場合には、名前に日本語を含んでいても現象は発生しません。

##当方での発生状況
以下のコードでaccdbを開いたところ「サンプル」という日本語モジュールがひっかかり、エラーが出るようになった。以後、データベースを開くごとにエラーが出てしまう。

```vbnet
Option Explicit

' http://techbank.jp/Community/blogs/mymio/archive/2009/01/22/4480.aspxを改良(?)

' --------------------------------------------------------------------------------
' 定数
' --------------------------------------------------------------------------------
Dim vbext_ct_ClassModule, vbext_ct_Document, vbext_ct_MSForm, vbext_ct_StdModule
vbext_ct_ClassModule = 2
vbext_ct_Document = 100
vbext_ct_MSForm = 3
vbext_ct_StdModule = 1

' --------------------------------------------------------------------------------
' 変数宣言
' --------------------------------------------------------------------------------
Dim inFileName, fs, inFile, outPath, outFolder
Dim accessObj, vbproject, vbcComp, ext, moduleName

' --------------------------------------------------------------------------------
' メイン
' --------------------------------------------------------------------------------
inFileName = WScript.Arguments(0)

Set fs = CreateObject("Scripting.FileSystemObject")
Set inFile = fs.GetFile(inFileName)
outPath = inFile.ParentFolder.Path & "\" & inFile.Name & "_text"

' 出力フォルダが存在していれば消して作り直す
If fs.FolderExists(outPath) Then
	fs.DeleteFolder(outPath)
End If
fs.CreateFolder(outPath)
Set outFolder = fs.GetFolder(outPath)

' mdbを開く
Set accessObj = CreateObject("Access.Application")
accessObj.OpenCurrentDatabase(inFileName)
accessObj.Visible = True
accessObj.UserControl = True
' モジュールをテキスト化
Set vbproject = accessObj.VBE.ActiveVBProject

For Each vbcComp In vbproject.VBComponents
    Select Case vbcComp.Type
        Case vbext_ct_Document, vbext_ct_StdModule
            ext = ".bas"
        Case vbext_ct_ClassModule
            ext = ".cls"
        Case vbext_ct_MSForm
            ext = ".frm"
        Case Else
            ext = ""
   End Select

   ' Accessでは、「/」 入りのモジュール名を作成することができるが
   ' モジュールファイルをエクスポートするとOSの問題で、
   ' 「/」入りのファイル名を保存することができない
   ' そのため、「/」文字を「_」に変換してエクスポートする
   moduleName = Replace(vbcComp.Name, "/", "_")
   vbcComp.Export (outFolder.Path & "\" & moduleName & ext)
Next

' mdbを閉じる
accessObj.Quit()
msgbox "完了しました"
```

##解決方法
現在示されている解決方法はオフィスを巻き戻すことです。事態が流動的なため、ツィートなどに引用されているMSのブログを参照してください。
　当方はこの方法で戻ったため、「サンプル」というモジュールやクラス名に「サンプル1」（1は半角）をくわえて対応しました。そのあとコンパイルでクラス名を引っ張ってきているコードを修正しました。

###現在の解決方法についての注意
Ver 1708からコマンドラインで元に戻したら***次の自動更新の停止までやらないとまた1708にアップデートします。***

##類似の現象
Access2010でも類似のエラーメッセージが出るようになる場合が2013年ごろ発生しているが、今回はOffice2016 Access2016限定である。
[VBAオブジェクトを読み取れないエラーの対処方法](http://factory.tsware.jp/support/support_036.htm)
Access2010でデータベースファイルを開いた際に、『データベースに含まれているVBAオブジェクトを読み取れないため、データベースを開くことができません。』といったエラーメッセージが表示されデータベースを開けない場合、そのAccessにService Packが適用されていないことが原因として考えられます。次の手順で対処を行ってみてください。
[Access2010でコンボボックスの配置時にウィザード起動せず、エラーがでる。 ](https://ameblo.jp/tmozzr/theme-10065632797.html)

[エラー メッセージ "データベースに含まれている VBA プロジェクトを読み取れないため、データベースを開くことができません" が、Access 2010 でコンパイル済みの Microsoft Access MDE、ACCDE、または ADE ファイルを開くと表示される](https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/08/23/ver1708-issue-japanesenamevbamodule/)