Excel 2010 Professional Plus(32ビット)は、新しいワークシートのセットを作成し、VBA画面のすべての元のワークシートの名前を変更したようです。 Sheet10はSheet101になり、Sheet13はSheet131になります。これにより、UDFは機能を停止します。 「新しい」「sheet10」と「sheet13」は、VBAプロジェクトウィンドウ以外の場所には存在しないようです。 「新しい」シートの横には青いアイコンがあります。
UDFは機能します。これらの新しいシートが作成され、古いシートの名前が変更されるまで。 Excelファイルには、12のワークシートと1つのワークブックしかありません。 VBAプロジェクトには、2つのワークブックと20のワークシートが表示されます。
1)これの原因は何ですか?
2)どうすれば修正できますか?
3)どうすればそれを防ぐことができますか?
存在しない「sheet3」のプロパティと実際のシート「sheet31」のプロパティを示す画像を追加しました。存在しないすべてのシートとワークブックには、プロパティの長いリストがあります。
XLSファイルはこちら グーグルのビューアで開くのでダウンロードする必要があります。
更新:2016年1月6日現在、このXLSの数式は、開いたときにすべてエラー(#VALUE)です。前回の更新で見たように、Excelは存在しないシートを作成していません。先週、XLSと数式は機能していて、変更はありませんでした。これは、以下の投稿で提案されているように、すべてのシートをコピーした新しいワークブックです。元のワークブック(存在しないワークシートを含むpixに表示されているもの)には、#VALUEエラーはありません。両方のワークブックは同じコンピューター上にあり、比較のために先月以上一緒に更新されています。
UPDATE3、2016年1月6日誤ってテキストセルを移動し、[元に戻す]をクリックすると、すべての#VALUEエラーがなくなり、正しい計算がすべてできました。 WTF。
問題の鍵は、メッセージボックス「オートメーションエラー。致命的な障害」です。
単一の診断はありませんが、可能性があります...
ワークブックが、VBAエディターの参照セクションに含まれていないオブジェクトを含むマクロを実行しようとすると、この種のエラーが発生する可能性があります。
たとえば、特定のDLLをPCに正しく登録する必要がある場合。これらのDLLがPCにある場合、ブックは問題ありませんが、DLLのない別のPCでは問題ありません。起こります。
すべてのプロジェクトには、デフォルトとして以下が含まれます。
_Visual Basic For Applications
Microsoft Excel x.0 Object Library
OLE Automation
Microsoft Office x.0 Object Library
and possibly if a form has ever been added -
Microsoft Forms 2.0 Object Library
_
ここで、x
はExcelのバージョンです。
これで実行する前に、別のPCでマクロを開いて変更しましたか?
そのため、参照は他のシステムのバージョンに更新されており、システムで見つかりません。
UDFの1つが問題を引き起こしています。問題を再現し、黄色で強調表示されている機能を確認します。
投稿した画像に準拠している場合、問題はSumbytext(rg as Range,ltr as String)as Double
にあります。必ず:
rg
の範囲を受け取ります。常に有効な範囲ですか?Sumbytest
およびMidResult
がDoubleとして定義されているのはなぜですか?この他のスレッド から私のソリューションを再投稿します。
これが私の解決策です。これは一貫して機能し、シートやコードを空白のブックに手動でコピーする必要はありません。起動時に「自動化エラー-壊滅的な失敗」エラーが発生したいくつかの破損したワークブックでこのメソッドをテストしました。
注:元の破損したファイルは。xlsmとして保存されました
ファイルが修正されました!必要に応じて、MyFile.xlsbファイルを.xlsmとして再保存できます。私の経験では、.xlsmファイルは非常に簡単に破損するため、常に.xlsb形式を使用する習慣を身に付けます。
誰かがこれが役立つことを願っています:)
SuMauのソリューションはうまくいきましたが、追加の手順を追加する必要がありました。VBAProjectがデフォルト以外の参照を使用している場合は、それらも復元する必要があります。
それらを見つけやすくするために、元のワークブックは、xlsxファイルに変換したワークブックとともに開いたままにしておきます。このように、VBAメニューから[ツール]→[参照]を選択すると、追加するすべての参照が、リストの上部にあるチェック済みの参照のすぐ下に表示されます。
両方のファイルを開いている場合は、古いファイルからパッチを適用するファイルにコードモジュールをドラッグすることもできます。これにより、ワークシートまたはワークブックオブジェクト上にないすべてのVBAコードを簡単に移植できます。
私のソリューションは@Scooxによって投稿された.xlsbソリューションに似ていますが(ありがとう!)、仕事用PCのマクロ設定を変更できないため、変更する必要がありました。
理想的ではありませんが、私のために働きました!