12

ここに私が理解していないものがあります。

このクラス モジュールが与えられた場合 (クラッシュを再現するのに必要な最小限のものまで取り除かれます):

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "TestCrashClass"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Public Function Init() As TestCrashClass
Attribute Init.VB_UserMemId = 0
    Dim tcc As New TestCrashClass
    Set Init = tcc
End Function

Public Property Get Data() As String
    Data = "test data"
End Property

このコードを入力すると、Excel が完全に失敗する理由を誰か教えてください。

Sub MakeExcelCrash()
    With TestCrashClass(

この時点で、私はこの素敵なメッセージ:

Excel のクラッシュ - おっと!

問題のある括弧なしで完全な手順を入力し、後でそれらを追加しようとしても、同じクラッシュが発生します。

Excel がクラッシュしないようにする唯一の方法は、一連()のコードを別の場所からこのコード行にコピーして貼り付けることです。

 Sub MakeExcelCrash()
     With TestCrashClass()
         Debug.Print .Data
     End With
 End Sub

メソッドにパラメーターがある場合Init()(オプションのパラメーターであっても)、開き括弧を入力してもクラッシュしません。

回避策よりも、なぜこれが起こるのかについて興味があります。私のコードでは実際にはそれほど頻繁に発生するわけではなく、発生した場合はアプローチを変更して修正できますが、これらのクラッシュの原因がわからないことに本当に不満を感じています. では、VBA の内部動作について詳しく知っている人が説明してくれるでしょうか?

4

3 に答える 3