VBA中With块变量能否被关键字引用?是否存在指代它的关键字?
VBA With块对象引用的相关问题解答
嘿,我来帮你理清这两个关于VBA With块的疑问:
问题1:With代码块内的变量是否可以通过关键字进行引用?
答案是可以间接实现引用,但没有专门的内置关键字直接指代。With块的核心作用是帮你省略重复输入对象名,直接调用它的成员(比如.DoSomething),但如果需要把这个对象本身作为参数传递给其他方法,VBA并没有提供现成的内置关键字来直接获取这个With块的对象。
问题2:是否存在专门用于指代With块变量的关键字?
很遗憾,VBA里没有这样的内置关键字。你举的例子With New myType: .DoSomething: DoSomethingElse "abc", This, 123: End With无法直接运行,因为这里的This并不指代With块里的myType实例——This在类模块里指代类本身的实例,但在标准模块中它甚至不是合法的关键字。
替代解决方案
不过我们有两种实用的方式来实现类似需求:
提前将对象赋值给变量
这是最直接的方法,先把With块的对象存到一个变量里,之后不管是在With块内还是外部,都可以用这个变量传递对象本身:Dim myInstance As New myType With myInstance .DoSomething DoSomethingElse "abc", myInstance, 123 End With在自定义类中添加
Self属性
如果myType是你自己编写的类模块,可以在类内部添加一个返回自身的属性,这样在With块里就能通过.Self来指代这个对象:
首先在myType类模块中添加代码:Public Property Get Self() As myType Set Self = Me End Property然后就可以这样使用:
With New myType .DoSomething DoSomethingElse "abc", .Self, 123 End With
内容的提问来源于stack exchange,提问作者Erik på kontoret
相关产品推荐
相关产品推荐

