機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > VBAのエラー

○○クラスの××メソッドが失敗しました



Sub Sample1()
    Range("A1").AutoFit
End Sub



いろいろなケースで発生するエラーです。
上のコードは、セルA1に対して"列幅の自動調整(AutoFitメソッド)"を実行しようとしたためエラーになりました。AutoFitメソッドは、行単位または列単位に対して実行しないといけないからです。正しくは、次のようにします。

Sub Sample1()
    Range("A1").Columns.AutoFit
End Sub

または

Sub Sample1()
    Range("A1").EntireColumn.AutoFit
End Sub

みたいに。

Excel 2007のVBAでは[ヘルプ]ボタンをクリックしても、解説ページが開きませんでした。
Excel 2003のVBAヘルプでは、次のように記載されています。
マクロ エラー
実行中のマクロにエラーが発生しました。次のいずれかの理由により、指定したメソッドは指定したオブジェクトで使用できません。
  • 引数に無効な値が含まれています。存在しないオブジェクトにアクセスしたことが原因と考えられます。たとえば、3 つのブックを開いているときに Workbooks(5) と指定するとエラーが発生します。
  • 適用された状況ではメソッドを使用できません。特に、Range オブジェクトの一部のメソッドでは、対象となる範囲にデータが入力されている必要があります。範囲にデータが入力されていない場合は、メソッドの実行に失敗します。
  • ファイルの読み取りの失敗、ファイルへの書き出しの失敗などの外部エラーが発生しました。
  • セキュリティ設定のために、メソッドとプロパティを使用できません。たとえば、Office のドキュメントに格納された Microsoft Visual Basic for Applications (VBA) コードを操作する VBE オブジェクトのプロパティとメソッドには、既定でアクセスできません。
メソッドの使い方に関する詳細については、Visual Basic のヘルプで目的のメソッド名を検索してください。
何だか、いろいろ書いてありますが、要するに「メソッドの実行に失敗した」というエラーでしょうか。
ちなみに、最初の例に挙げているケースでは、



実行時エラー'9'が発生します。


2番目のケースは、確かに実行時エラー'1004'が発生しますね。次のコードは、データが何も入力されていない空欄セルで実行するとエラーになります。並べ替える対象がないのですから当然ですね。



同じようなエラーでも「○○クラスの××メソッドが失敗しました」ではないメッセージが表示されることもあります。次のコードも、アクティブセルが空欄だとエラーになります。



まぁ、操作の対象となるデータを選択していないのですから「データが選択されていません」の方が、親切ちゃ親切なアドバイスかもしれません。

また、もっと難解なメッセージが表示されることもあります。

Sub Sample5()
    Range("A1").Name = "=Sheet3!B3"
End Sub



名前には、セルのアドレス(参照)と間違えるような文字列は設定できません。という意味のエラーなのですが、それにしても「アプリケーション定義またはオブジェクト定義のエラー」って言われてもね〜。昔のWindowsでよく見た「不正な処理をしました」とか「一般保護違反です」みたいな、ユーザーにとっては、何の参考にもならないエラーメッセージですね。ただし、もう少し分かりやすいメッセージになる場合もあります。

Sub Sample6()
    Range("A1").Name = "2007"
End Sub



こちらは分かりやすいです。親切丁寧に教えてくれています。ただ、あまりに丁寧すぎて、メッセージが全部表示し切れていませんけど・・・(^^;

3番目の例「ファイルの読み取りの失敗、ファイルへの書き出しの失敗」は、Openステートメントで外部ファイルを扱うようなケースでは、別のエラーが発生することも多いです。


ただし、次のようにOpenメソッドや、Insertメソッドを使ったケースでは、この実行時エラー'1004'が発生します。

Sub Sample7()
    Workbooks.Open "C:\存在しないブック.xls"
End Sub



Sub Sample8()
    ActiveSheet.Pictures.Insert "C:\存在しない画像.jpg"
End Sub



ついでですから、最後の
  • セキュリティ設定のために、メソッドとプロパティを使用できません。たとえば、Office のドキュメントに格納された Microsoft Visual Basic for Applications (VBA) コードを操作する VBE オブジェクトのプロパティとメソッドには、既定でアクセスできません。
も、実際に試してみましょう。

Sub Sample9()
    MsgBox ThisWorkbook.VBProject.Name
End Sub



ただし、まったく同じ設定で、同じコードでも、次のメッセージが表示されることもあります。




要するに、メソッドの実行に失敗したとき発生するエラーのようです。メソッドはたくさんありますし、エラーが発生する状況もさまざまですから、表示されるメッセージもいろいろなのでしょう。なお、メソッドではなくプロパティ設定のエラーで実行時エラー'1004'が発生することもあります。

Sub Sample10()
    Range("A1").ColumnWidth = "tanaka"
End Sub



何だかもう「分類されないその他のエラー群」みたいな感じですね。ちなみに、ヘルプの「トラップできるエラー」の一覧には、この1004はリストアップされていません。でも、トラップできるので、解説に加えておきました。



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