gpt4 book ai didi

vba - Let/Get 属性中的可选参数如何工作?

转载 作者:行者123 更新时间:2023-12-04 00:59:15 25 4
gpt4 key购买 nike

我在 Excel 2007 中使用 vba,并且正在为类模块编写代码。

1) 下面的代码甚至可能吗?...
基本上我有两个枚举,称它们为 eDATASETeDATATSUBSET .来自 eDATASET 的特定值应该从 Let 中可选传递的参数触发赋值属性(property)。像这样的东西:

Public Property Let foo(Optional ByVal lngSubSet as eDATASUBSET, _  
ByVal lngSuperSet as eDATASET)
Select Case lngSuperSet
Case eDATASET.abc, eDATASET.def
mlngBar = lngSuperSet
Case eDATASET.xyz
'// if lngSubSet not passed, trigger error code...
mlngBar = lngSubSet
End Select
End Property

2) 调用对象时如何将可选参数传递给可写属性...
除了 Optional 看似向后的位置参数(与函数和子函数中的可选参数相比),我很难找到有关此功能的任何文档。 vba 帮助是这样说的:

Optional. Indicates that an argument is not required. If used, all subsequent arguments in arglist must also be optional and declared using the Optional keyword. Note that it is not possible for the right side of a Property Let expression to be Optional.



以及来自 vbusers.com 的以下内容.在使用方式上都没有过多解释。那么在从代码模块调用对象时我将如何传递可选参数... oObj.foo = ???
3) 有更好的方法吗?...
我对 oop 有一个基本的了解(至少在它是如何在 vba 中实现的)。有没有更好的方法有条件地将参数接受到对象中?

最佳答案

1) 是 你的代码是可能的。

2) 这就是你传递参数的方式:

假设 myObject是你类(class)的一个对象:

myObject.foo(lngSubSet) = lngSuperSet 

参数在 arglist 中的位置确实看起来很奇怪,但这对你来说是 VBA。假设你有 4 个参数,其中两个是可选的,再加上你的右手边。你可以这样放置它们:
Public Property Let foo(arg1, arg2, Optional arg3, Optional arg4, _  
RHS)

并像这样使用它们(假设您选择退出 arg4 ):
myObject.foo(arg1,arg2,arg3) = RHS

3)有没有更好的方法来做到这一点? 总是有的,这取决于你问谁。你可以有你的 lngSubSet参数完全作为一个单独的属性。这就是我倾向于这样做的方式。但在你的情况下,你的做事方式可能对你很有效。我不知道,这在很大程度上是一个品味问题,取决于您的具体应用。

关于vba - Let/Get 属性中的可选参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642142/

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