gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:00:41 24 4
gpt4 key购买 nike

我创建了一个类对象 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com