使用函数和With / End With访问类对象

我已经创build了一个类对象classBlock ,它使用一个数组来加速对Excel工作表的读/写操作。 我还创build了一个使其易于使用的function:

 Function funcBlock(objSheet as WorkSheet) as classBlock Set funcBlock = New classBlock funcBlock.Initialize objSheet End Function 

如果我使用With构造函数调用该函数,如下所示…

 With funcBlock(ActiveSheet) .SomeFunctions End With 

End With之后存在一个classBlock的实例吗?

如果我多次调用funcBlock ,我是否使用classBlock实例classBlock内存?

谢谢!

也许你会误解With-End With的概念? With语句允许您在指定的对象上执行一系列语句,而无需重新对象的名称。

所以你得到了类的实例,然后可以使用With来写入语句,而不必重复对象名称:

 Dim block as classBlock Set block = funcBlock(ActiveSheet) With block .SomeFunctions ' .SomeProperty = 100 ' .Save(true) ' etc. End With 

With只会让你input以下内容。

 block.SomeFunctions block.SomeProperty = 100 block.Save(true) 

该类的实例现在由variablesblock引用,并根据声明的范围而存在。

如果多次调用函数funcBlock ,则每次调用该函数时都会创build一个新对象。

所以我们可以调用三次函数:

 Dim block1 as classBlock Set block1 = funcBlock(ActiveSheet) Dim block2 as classBlock Set block2 = funcBlock(ActiveSheet) Dim block3 as classBlock Set block3 = funcBlock(ActiveSheet) 

现在你在内存中有三个对象,它们被variablesblock1, block2, block3 。 通过这个variables可以访问这些对象。

但是当你像这样调用函数funcBlock三次:

 Dim block as classBlock Set block = funcBlock(ActiveSheet) ' some code ... Set block = funcBlock(ActiveSheet) ' some code ... Set block = funcBlock(ActiveSheet) 

…只有最后一个实例被variablesblock引用并且可以被访问。 前两个实例只是凌乱的内存:)。 HTH

感谢您的回应。 遵循jkpieterse的build议,我将以下内容添加到classBlock

 Private Sub Class_Initialize() MsgBox "HELLO" End Sub Private Sub Class_Terminate() MsgBox "GOODBYE" End Sub 

然后我跑了以下几点:

 Sub Test With funcBlock(ActiveSheet) End With MsgBox "AFTER" End Sub 

由此产生的消息序列是: HELLOGOODBYEAFTER 。 这意味着Excel意识到该实例是在With中创build的,因此会在End With破坏它。 据推测, classBlock创build的数组也会在类实例被销毁时被擦除。