次の例には、2 つのクラスと 1 つの通常の 3 つの VBA モジュールが含まれています。RubberDuck VBA テストを実行してから Excel を閉じようとすると、CPU を積極的に使用している間に Excel がハングします。テストを 1 回実行しても毎回この問題が再現されるわけではありませんが、少なくとも 2 回実行すると、毎回問題が再現されるようです。
RDVBA バージョン 2.5.2.5871
OS: Microsoft Windows NT 6.2.9200.0、x64
テスト環境 1:
ホスト 製品: Microsoft Office XP x86
ホスト バージョン: 10.0.6501
ホスト実行可能ファイル: EXCEL.EXE
テスト環境 2:
ホスト製品: Microsoft Office 2016 x64
ホスト バージョン: 16.0.4266.1001
ホスト実行可能ファイル: EXCEL.EXE
ModuleTests.bas
'@TestModule
Option Explicit
Option Private Module
Private Assert As Rubberduck.PermissiveAssertClass
#Const USE_ASSERT_OBJECT = True
'@ModuleInitialize
Private Sub ModuleInitialize()
Set Assert = New Rubberduck.PermissiveAssertClass
End Sub
'@ModuleCleanup
Private Sub ModuleCleanup()
Set Assert = Nothing
Debug.Print CStr(Timer()) & ": Assert = Nothing"
End Sub
'@TestMethod("Factory")
Private Sub ztcCreate_VerifiesDefaultManager()
Dim dbm As Class2
Set dbm = Class2.Create(ThisWorkbook.Path)
#If USE_ASSERT_OBJECT Then
Assert.IsNotNothing dbm
#Else
Assert.IsTrue Not dbm Is Nothing
#End If
End Sub
Class1.cls
'@PredeclaredId
Option Explicit
Public Function Create(Optional ByVal DefaultPath As String = vbNullString) As Class1
Dim Instance As Class1
Set Instance = New Class1
Set Create = Instance
End Function
Private Sub Class_Terminate()
Debug.Print CStr(Timer()) & ": Class1 Class_Terminate"
End Sub
Class2.cls
'@PredeclaredId
Option Explicit
Private Type TClass2
DllMan As Class1
End Type
Private this As TClass2
'@DefaultMember
Public Function Create(ByVal DllPath As String) As Class2
Dim Instance As Class2
Set Instance = New Class2
Instance.Init DllPath
Set Create = Instance
End Function
Friend Sub Init(ByVal DllPath As String)
Dim FileNames As Variant
Set this.DllMan = Class1.Create(DllPath)
End Sub
Private Sub Class_Terminate()
Debug.Print CStr(Timer()) & ": Class2 Class_Terminate"
End Sub