• 締切済み

実行時エラー -'-2147417848

エクセルがおかしいです。 ファイルが壊れてるのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Range("a2") = Empty Range("a3") = Empty という、単純なコードなのですが イベントが発生すると 「メモリ不足です。完全に表示できません。」となったり、 実行時エラー -'-2147417848(80010108) '_default'メソッドは失敗しました 'range'オブジェクト となります。 Range("a2") = Empty の部分で発生します。 そして強制終了され、再起動されます。 コードとしては問題ないですよね? バージョンは2010です。

みんなの回答

回答No.2

こんにちは。 >実行時エラー -'-2147417848(80010108) これは、アプリケーション側のエラーのようですね。 >'_default'メソッドは失敗しました 'range'オブジェクト プログラムのメモリがどんどん上がっていくようです。 私のExcel 2010 では、一度エラーが出た後は、そのワークブックのみが使えなくなる状態でした。 >Range("a2") = Empty よく、ここが問題だと分かりましたね。 Empty と入力する時点で、再び、「Private Sub Worksheet_Change」に戻ることは確認できましたか? >コードとしては問題ないですよね? 入門者としては、#1の方のように、Application.EnableEvent のFalse で、再び、戻らないようにして、終わる時に、True にしてあげればよいのです。 もし、余裕があるなら、以下も読んでみてください、強要はしませんが。 ワークシート側には、実際には、Empty値自体は、存在しないのです。 当たり前のような気がしますが、Empty値というのは、Variant 型の変数に、何も入れない状態か、値がある場合は、Empty値を入れるというように考えています。あくまでも、VBAで使われるものだと思っています。 他にも似たようなものに、Null値というものがあります。 数値型なら、0 で、文字型なら、 ""(長さ0の文字列) ですが、今回の場合は、"" と同等なのです。 つまり、Range("A2").ClearContents と同等なのです。 それから、入門レベルを越えたら、正しく、プロパティ Valueを入れたほうがよいです。 Range("A2").Value = "" '//(以下は、論理的矛盾は無視します) Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False  Range("A2").ClearContents  Range("A3").ClearContents Application.EnableEvents = True End Sub

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

Range("a2") = Empty これがまたchangeイベントをトリガして、一種の無限ループに陥っています。 状況に依ってはエクセルが自動復帰する場合もありますが、スタックオーバーフローで停止したりご質問のケースではエラーになります。 Private Sub Worksheet_Change(ByVal Target As Range) application.enableevents = false Range("a2") = Empty Range("a3") = Empty application.enableevents = true end sub などのような手で、再帰的にならないように工夫します。

関連するQ&A

専門家に質問してみよう