4

私は (残念ながら) Excel 2000 VBA でアプリケーションを開発しています。カスタム クラス プロパティ、関数、またはサブ デバッグ内で発生したエラーは、プロパティが呼び出された VBA コード内のポイントでエラーが発生したかのようにデバッグされることを発見したと思います。つまり、VBE デバッガーはエラーが発生した Class プロパティのポイントに移動するのではなく、プロパティが最初に入力された場所 (たとえば、Module Sub または Function から) に移動します。最も浅い OO Excel 2000 VBA コードは、エラーの原因となっている命令を見つけるためにすべての Class メソッドを 1 行ずつ実行する必要があるためです。

何か不足していますか、それとも Excel 2000 で対処しなければならない既知のバグですか? これは 2003 年または 2007 年に修正されましたか?

コード例:

'''''''''''''''
'In Module1:

Public Sub TestSub1()
    Dim testClass As Class1
    Dim testVariant As Variant
    Set testClass = New Class1
    testVariant = testClass.Property1 'Debugger takes me here...
End Sub

''''''''''''''
' In Class1

Property Get Property1() As Variant
    Err.Raise 666, , "Excel 2000 VBA Sux!" 'But error is actually thrown here.
End Property
4

4 に答える 4

4

Office 2003の場合、デバッガーが未処理のエラーで中断するように構成されている場合(デフォルトの構成)にこの動作が発生します。

Err.Raise行で中断する場合は、すべてのエラーで中断するように構成する必要があります(ツール/オプション/一般/エラートラップ/すべてのエラーで中断)。

Office 2000でも同じだと思いますが、確認するコピーがありません。

于 2008-11-21T09:30:45.970 に答える
1

このページは、VBA でのエラー処理に関する非常に優れたリソースです。

于 2008-11-21T17:38:34.943 に答える
0

この「機能」は Excel 2003 でも同じですが、2007 では違うとは驚きです。

于 2008-11-21T02:54:14.493 に答える
0

同じことが Excel 2010 でも当てはまります。私がこの動作に遭遇した場所です。

Chip Pearson のサイトを引用するには:

Break In Class Module 以外のエラー トラップ設定を使用する理由はまったくありません。

エラーモードの違いについての彼の説明:

コードをテストして実行する場合、3 つのエラー トラップ モードがあります。1 つ目は、Break On All Errors です。これにより、エラーが発生した場合に、コード内の On Error 処理に関係なく、デバッガーが開きます。2 番目のオプションは、未処理のエラーで中断です。これにより、エラーが既存の On Error ディレクティブによって処理されない場合、デバッガーが開きます。これは最も頻繁に使用されるオプションであり、デフォルト設定です。3 番目のオプションである [Break In Class Module] は、最も重要ですが、ほとんど使用されていません。これはデフォルトのエラー トラップ モードではないため、手動で設定する必要があります。

Break In Class Module は、実際に問題を引き起こしているオブジェクト モジュール内のコード行でデバッガーを中断させるため、最も重要です。Break In Class Module 設定は、[ツール] メニューからアクセスできる [オプション] ダイアログにあります。以下に示すように、[オプション] ダイアログの [全般] タブにあります。

于 2015-10-18T15:09:59.797 に答える