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

标签 vba excel

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

相关文章:

vba - 我可以遍历文件夹(包括子文件夹)中的所有 Outlook 电子邮件吗?

vba - VBA Winsock无法使用更长的端口长度(sin_port)

vba - 如何根据 vba 中的值更改文本框的背景颜色?

excel - getElementById 在 VBA 中不起作用,错误 438

VBA如果最后两个字符等于 "XX"则删除整行

循环内的 VBA 偏移 - 需要永远运行

database - 查询 Excel 表格

vba - 我的 VBA 代码每次运行时都会导致 Excel 崩溃

Excel公式: Minimum value of an array containing strings

excel - 选择行 "B"和 "C"中的所有值并向上移动 1 步