web-dev-qa-db-ja.com

ExcelはVBA Project Explorerに存在しないワークシートを作成します

Excel 2010 Professional Plus(32ビット)は、新しいワークシートのセットを作成し、VBA画面のすべての元のワークシートの名前を変更したようです。 Sheet10はSheet101になり、Sheet13はSheet131になります。これにより、UDFは機能を停止します。 「新しい」「sheet10」と「sheet13」は、VBAプロジェクトウィンドウ以外の場所には存在しないようです。 「新しい」シートの横には青いアイコンがあります。

UDFは機能します。これらの新しいシートが作成され、古いシートの名前が変更されるまで。 Excelファイルには、12のワークシートと1つのワークブックしかありません。 VBAプロジェクトには、2つのワークブックと20のワークシートが表示されます。

1)これの原因は何ですか?
2)どうすれば修正できますか?
3)どうすればそれを防ぐことができますか?

Those blue icons on the left do not really existenter image description here

enter image description here

存在しない「sheet3」のプロパティと実際のシート「sheet31」のプロパティを示す画像を追加しました。存在しないすべてのシートとワークブックには、プロパティの長いリストがあります。

Sheet3-nonexistentSheet31-exists

XLSファイルはこちら グーグルのビューアで開くのでダウンロードする必要があります。

更新:2016年1月6日現在、このXLSの数式は、開いたときにすべてエラー(#VALUE)です。前回の更新で見たように、Excelは存在しないシートを作成していません。先週、XLSと数式は機能していて、変更はありませんでした。これは、以下の投稿で提案されているように、すべてのシートをコピーした新しいワークブックです。元のワークブック(存在しないワークシートを含むpixに表示されているもの)には、#VALUEエラーはありません。両方のワークブックは同じコンピューター上にあり、比較のために先月以上一緒に更新されています。

UPDATE3、2016年1月6日誤ってテキストセルを移動し、[元に戻す]をクリックすると、すべての#VALUEエラーがなくなり、正しい計算がすべてできました。 WTF。

6
mechengr02

問題の鍵は、メッセージボックス「オートメーションエラー。致命的な障害」です。

単一の診断はありませんが、可能性があります...

  • ケース1

ワークブックが、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でマクロを開いて変更しましたか?

そのため、参照は他のシステムのバージョンに更新されており、システムで見つかりません。

  • ケース2

UDFの1つが問題を引き起こしています。問題を再現し、黄色で強調表示されている機能を確認します。

投稿した画像に準拠している場合、問題はSumbytext(rg as Range,ltr as String)as Doubleにあります。必ず:

  • UDFロジックを段階的にトレースして、失敗する可能性のある場所を見つけます。
  • 名前付き範囲 "List_HolAbbr"は常に値ですか?どっち?
  • UDFは変数rgの範囲を受け取ります。常に有効な範囲ですか?
  • 整数値を使用しているため、SumbytestおよびMidResultがDoubleとして定義されているのはなぜですか?
2
jcbermu

この他のスレッド から私のソリューションを再投稿します。

これが私の解決策です。これは一貫して機能し、シートやコードを空白のブックに手動でコピーする必要はありません。起動時に「自動化エラー-壊滅的な失敗」エラーが発生したいくつかの破損したワークブックでこのメソッドをテストしました。

注:元の破損したファイルは。xlsmとして保存されました

  1. 空のExcelブックを開く
  2. [開発者]タブ>マクロセキュリティ>通知なしですべてのマクロを無効にする
  3. Excelを閉じる
  4. MyFile.xlsmなどの破損したファイルをダブルクリックします
  5. ファイル>名前を付けて保存...> MyFile.xlsb(.xlsmではない)、。xlsb形式を選択するのがトリックです
  6. [開発者]タブ>マクロセキュリティ>すべてのマクロ(または任意のレベルのセキュリティ)を有効にする
  7. Excelを閉じる
  8. MyFile.xlsbをダブルクリックします

ファイルが修正されました!必要に応じて、MyFile.xlsbファイルを.xlsmとして再保存できます。私の経験では、.xlsmファイルは非常に簡単に破損するため、常に.xlsb形式を使用する習慣を身に付けます。

誰かがこれが役立つことを願っています:)

0
Scoox

SuMauのソリューションはうまくいきましたが、追加の手順を追加する必要がありました。VBAProjectがデフォルト以外の参照を使用している場合は、それらも復元する必要があります。

それらを見つけやすくするために、元のワークブックは、xlsxファイルに変換したワークブックとともに開いたままにしておきます。このように、VBAメニューから[ツール]→[参照]を選択すると、追加するすべての参照が、リストの上部にあるチェック済みの参照のすぐ下に表示されます。

両方のファイルを開いている場合は、古いファイルからパッチを適用するファイルにコードモジュールをドラッグすることもできます。これにより、ワークシートまたはワークブックオブジェクト上にないすべてのVBAコードを簡単に移植できます。

0
oddacorn

私のソリューションは@Scooxによって投稿された.xlsbソリューションに似ていますが(ありがとう!)、仕事用PCのマクロ設定を変更できないため、変更する必要がありました。

  1. テキストファイル内のすべてのマクロのコピーを作成する
  2. 破損したファイルを.xlsxとして保存して閉じる
  3. ファイルを再度開き、.xlsbとして保存して閉じます
  4. すべてのマクロを.xlsbファイルに貼り付け

理想的ではありませんが、私のために働きました!

0
SuMau