我创建了一个类对象classBlock
它使用数组来加速对Excel工作表的读/写速度。我还创建了一个函数来使其易于使用:
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
实例弄乱了内存?
谢谢!
也许你误解了With-End With
的概念?With 语句允许您对指定对象执行一系列语句,而无需重新限定对象的名称。
因此,您可以获取类的实例,然后可以使用With
编写语句,而无需重复对象名称:
Dim block as classBlock
Set block = funcBlock(ActiveSheet)
With block
.SomeFunctions
' .SomeProperty = 100
' .Save(true)
' etc.
End With
该With
仅使您免于键入以下内容。
block.SomeFunctions
block.SomeProperty = 100
block.Save(true)
该类的实例现在由变量block
引用,并且它根据声明它的作用域存在。
如果多次调用函数funcBlock
,则每次调用函数时都会创建新对象。
因此,让我们调用该函数,例如三次:
Dim block1 as classBlock
Set block1 = funcBlock(ActiveSheet)
Dim block2 as classBlock
Set block2 = funcBlock(ActiveSheet)
Dim block3 as classBlock
Set block3 = funcBlock(ActiveSheet)
现在,内存中有三个对象,它们使用变量 block1, block2, block3
引用。使用此变量,可以访问对象。
但是当你像这样调用函数funcBlock
三次时:
Dim block as classBlock
Set block = funcBlock(ActiveSheet)
' some code ...
Set block = funcBlock(ActiveSheet)
' some code ...
Set block = funcBlock(ActiveSheet)
。然后,varaible block
仅引用最后一个实例,并且可以访问该实例。前两个实例只是使内存:)混乱。呵呵
感谢您的回复。根据jkpieterse的建议,我在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
创建的,因此在End With
销毁它。据推测,当类实例被销毁时,classBlock
创建的数组也会被删除。