使用函数和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
由此产生的消息序列是: HELLO
, GOODBYE
, AFTER
。 这意味着Excel意识到该实例是在With
中创build的,因此会在End With
破坏它。 据推测, classBlock
创build的数组也会在类实例被销毁时被擦除。