我创建了一个类对象 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
... 执行
classBlock
的实例存在于 End With
之后?如果我调用
funcBlock
多次,我是否用 classBlock
的实例弄乱了内存? ?谢谢!
最佳答案
可能你误解了With-End With
的概念?
With statement 允许您对指定的对象执行一系列语句,而无需重新限定对象的名称。
所以你得到了类的实例,然后是 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)
...那么只有最后一个实例被变量
block
引用并且可以访问。前两个实例只会使内存困惑:)。高温高压
关于vba - 使用函数和 With/End With 访问类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35388758/