VBAマクロファイルが急に破損

ヘッダー広告
スポンサードリンク

作成したVBAマクロを保存して再度開くと急にファイルが破損するという事象が発生しました。
原因究明にかなりの時間を使いましたので、同事象が発生した方が早急に対応できるように今回展開させていただきます。

2018.1.12追記
現在同様のエラーメッセージで違う事象が発生しているようです。
このページに記載の内容では対応出来ない可能性がございます。

もし急ぎで対応したい場合は、当ページの 対応方法『バージョンを前のものに戻す』などを参考にしながら、以前のバージョンに戻してみてください。
Office2013の更新情報はこちら
Office2016の更新情報はこちら
2017/12/12に更新されているようなので、それ以前のバージョンに戻してみて、改善されるか試してみると良いかもしれません。

コマンドはこちらになります。

EXCEL2013

“%programfiles%\Common Files\Microsoft Shared\ClickToRun\officec2rclient.exe” /update user updatetoversion=15.0.4981.1001

EXCEL2016

“%programfiles%\Common Files\Microsoft Shared\ClickToRun\officec2rclient.exe” /update user updatetoversion=16.0.8625.2139

当ブログでは、この事象に関する情報をお待ちしております。
同様の事象が発生する方は、当ページ下部のコメント欄にてご連絡ください。

2018.2.4追記
Officeのダウングレードにて同じエラーメッセージが出力するとの情報を「かねこ」様からいただきました。

かねこ様の場合は、Office2016からOffice2013にダウングレードした際に、Office2016のアンインストールを行った後、このページに記載のものと同様のエラーメッセージが出力し、マクロが実行不可となったようです。
アンインストールの際には、Microsoftが提供しているEasyFixというツールを実行し、アンインストールが必要となりますので、アンインストール⇒インストールという作業を行う方は、以下のページを参照の上、手順通りに実行してください。
Microsoft PC から Officeをアンインストールする

モジュール名に日本語を含むとマクロファイルが破損する

破損した時の状況

VBAが保存されたExcelファイルを起動すると以下のようなメッセージが出力します。

メッセージ内容:
‘(ファイル名).xlsm’の一部の内容に問題が見つかりました。可能な限り内容を回復しますか?ブックの発行元が信頼できる場合は、「はい」をクリックしてください。


このメッセージにて「はい(Y)」を選択すると、次は以下のようなメッセージが出力します。

メッセージ内容:
読み取れなかった内容を修復または削除することにより、ファイルを開くことができました。削除されたパーツ:/xl/vbaProject.bin パーツ (Visual Basic for Applications (VBA))


もしくはマクロの有効化をクリックした時に、以下のメッセージが出力します。

メッセージ内容:
このブック内の Visual Basic for Applications(VBA)マクロは破損しており、削除されました。マクロの破損は現在のファイルに存在する可能性があります。マクロを回復するには、このファイルのバックアップコピーを開いてください (バックアップコピーがある場合)。


上記メッセージが出力すると、ファイル内のマクロが全て消えてしまうことになります。


マクロが破損する状況(ファイル内容)

マクロが破損するのは、VBAモジュール内に日本語が含まれている際に発生します。
※正確にはモジュール名の末尾が日本語で終わる場合


このファイルを保存し再度開くと、先ほどのメッセージが出力します。
そのままメッセージに選択すると、以下のようにマクロが全て消えてしまいます。


全てのモジュールが消えてしまうのです。


発生する条件

この事象が発生するのは、Office2016の1708以降のバージョンにて発生しています。(2017/10/3現在)
詳細は、こちらをご覧ください。
ご参考:Office 2016 バージョン 1708 以降で日本語の VBA モジュール名を含むファイルを開くとエラー

こちらはEXCELだけでなく、ACCESS、Word、パワーポイントなどでも発生しています。


対応方法

対応方法は2つです。

  • バージョンを前のものに戻す
  • モジュール名に日本語を使わない

バージョンを前のものに戻す方法は、先ほどのMicosoft のSupport Blogに記載されています。
作成したマクロファイルを起動した時に今回の事象が発生する場合には、以下のコマンドをコマンドプロンプトで実行してください。

“%programfiles%\Common Files\Microsoft Shared\ClickToRun\officec2rclient.exe” /update user updatetoversion=16.0.8326.2107

実行することで、問題が発生した前のバージョンに戻るため、問題が発生したファイルを起動することが可能になります。
自動更新が有効になっている場合は、しばらくすると同事象が発生しますので、自動更新を無効にするか、開いてすぐに修正やバックアップを取るなどして対応してください。

Officeから本事象に対して対応されたバージョンが公開されました

2017/10/15バージョン更新されたため、更新手順を追記

自動更新を無効にしている方
[ファイル] タブ – [アカウント] メニューの [更新オプション] をクリックし、[更新を有効にする(E)]をクリックしてください。
その後以下の手動更新を実施してください。

手動更新する方法
②[ファイル] タブ – [アカウント] メニューの [更新オプション] をクリックし、[今すぐ更新(U)]をクリックしてください。
この作業により、日本語モジュールのVBAマクロが組まれていても、今回の問題は起こらないようになりました。


もし対応が急ぎでない場合には、私はモジュール名に日本語を使わない方法をオススメします。


今まで私はプロシージャ名などだけは必ず日本語を使わないようにしていましたが、今後はモジュール名も日本語を使わないように致します。
というのも同一事象が今後も十分に発生しうると考えているからです。

今後同じことが発生しても困らないように意識して対応しましょう。


VBAProjectをエクスポート・インポートする方法

エクスポートするマクロ

今回のことで、一度作成していたマクロが開けなくなり再作成する必要が出てしまいました。
今回は作成したモジュールやクラスを一括で保存するマクロについてご紹介させていただきますので、急にファイルが破損した場合にも焦らないようにバックアップを取得するようにしましょう。


VBAProjectをエクスポートする

Option Explicit


Public Sub OutputVBA()

    Dim TempComponent As Object
    Dim OutPath As String

    OutPath = ThisWorkbook.Path & "\" & Format(Now, "YYYYMMDDhhmm") & "\"
    MkDir OutPath
    
    For Each TempComponent In ThisWorkbook.VBProject.VBComponents

        Select Case TempComponent.Type

        '標準モジュールの場合
        Case 1
            TempComponent.Export OutPath & TempComponent.Name & ".bas"

        'クラスモジュールの場合
        Case 2
            TempComponent.Export OutPath & TempComponent.Name & ".cls"
        
        'ユーザーフォームの場合
        Case 3
            TempComponent.Export OutPath & TempComponent.Name & ".frm"

        'Excelオブジェクトの場合
        Case 100
            TempComponent.Export OutPath & TempComponent.Name & ".cls"

        End Select

    Next

End Sub

こちらのモジュールを使用することで、マクロファイルが保存されているフォルダに、バックアップフォルダとバックアップファイルを作成します。


注意
上記マクロを実行した際に、以下のメッセージが出力することがあります。
メッセージ内容:実行時エラー’1004′:
プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます


こちらのメッセージが出力した際には、以下の対応をしてください。
EXCELのリボン(メニュー)から「開発」タブを選択し、そこにある「マクロのセキュリティ」を選択する。
マクロの設定メニューから、開発者向けマクロ設定→VBA プロジェクト オブジェクト モデルへのアクセスを信頼する(V)
を選択します。


すると、無事マクロが実行可能となります。


インポートするマクロ

先ほど出力したVBAProjectファイルをインポートするマクロは以下のようなものになります。


VBAProjectをインポートする

Option Explicit

'取込対象のVBAProjectファイルが存在しているフォルダ
Private Const IMPORT_DIR_PATH As String = "D:\201710030044\"

Public Sub ImportVBA()

    Dim TmpDir As String
    
    TmpDir = Dir(IMPORT_DIR_PATH, vbNormal)
        
    'VBAProjectファイルを全て取り込む
    Do Until TmpDir = ""
        
        ThisWorkbook.VBProject.VBComponents.Import IMPORT_DIR_PATH & TmpDir

        TmpDir = Dir
    Loop


End Sub

こちらのモジュールを使用することで、マクロファイルが保存されているフォルダから開いているファイルへマクロをインポートします。

今回の事象は急にマクロファイルが開かなくなったのでかなり焦りました。
やはりプログラムは基本的に日本語を使わないことが大事なのだと再確認出来ました。

また、作成したプログラムを定期的にバックアップすることの重要性を理解しましたので、今後は作成しっぱなしではなくテキストファイルに吐き出すことを意識したいと思います。
今回の記事が困っている方にお役に立てますと幸いです。

フッター広告

スポンサードリンク



シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. もやし より:

    先月25日より同じ症状に悩まされてきました。
    マクロ保存ブックを別PC(Office2010)にコピーし、そこからエクスポートしたものを毎回インポートしなおして使っていました。もちろんExcelを再度立ち上げると消えているので、その都度インポートしなおしでした・・・

    こちらの記事を見つけてバージョンを前のものに戻し、無事マクロがスムーズに使えるようになりました。助かりました、ありがとうございます。
    いまは一つずつ日本語名を書き換えています。コメントアウト以外で日本語を使用するのはやめた方がいいですね・・・勉強になりました。

    • uc4w6c より:

      わざわざのご連絡ありがとうございます。
      急なバージョンアップに、私達VBA使いのSEはかなり困惑したと思います。
      少しはお役に立てたようで大変うれしいです。
      それにしても毎回インポートはつらいですね・・・

      プロシージャ名等を日本語にしないのは意識しますが、モジュール名等もとなると、なかなか。。。
      今後はお互いに気を付けて、急なバージョンアップに惑わされないようにしましょう!

      • もやし より:

        ご返信ありがとうございます。
        マクロで効率化を図るはずが、こんなことで逆に時間を取られるとは思いませんでした・・・
        視覚的にどのマクロか分かりやすいので、ついモジュール名に日本語を使ってしまいがちですね。
        これからは意識してアルファベット表記を心がけますね!

  2. はなこ より:

    こちらの記事と全く同じ症状で困っていました;;
    でもこちらの記事のおかげで直りました!!
    本当に有難うございます。
    過去のバージョンに戻すことなく、[ファイル] タブ – [アカウント] – [更新オプション] – [今すぐ更新] から手動で更新で直りました!
    助かりました!!有難うございました☆

    • uc4w6c より:

      はなこ様 わざわざのご連絡ありがとうございます。
      この記事がお役に立つことが出来て大変うれしいです。
      そして、Officeから対処されたバージョンが公開されたみたいですね。
      情報いただきましてありがとうございます。
      記事も更新しておきます。

  3. かねこ より:

    メッセージが全く同じ状況で、ここにたどり着きました。

    ただ、実行しようとしているExcelマクロBookは他のパソコンからは普通に実行できるので、状況としては

    「個別の環境下でマクロの表示ができなくなる。」という感じですかね。

    直前にOfficeの入れなおし(2016→2013)をしたら急に動作しなくなったという状況です。参考にしていただければ幸いです。

    • uc4w6c より:

      かねこ様 ご連絡ありがとうございます。
      同じエラーメッセージで違う事象が起きているとのこと承知しました。
      ひとまず当ページの最上部に新しい事象についての注意を記載しましたが、何が起きているのかは調査させていただきます。
      新しい情報入り次第更新致しますので、よろしくお願い致します。