我在Excel 2007中使用vba,并且正在为类模块编写代码.
1)以下代码是否可能?...
基本上我有两个枚举,称之为eDATASET和eDATATSUBSET.特定值eDATASET应触发Let属性中可选传递参数的赋值.像这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
2)如何在调用对象时将可选参数传递给可写属性...
除了看似向后放置的Optional参数(与函数和子函数中的可选参数相比),我无法找到任何关于此的文档特征.vba帮助说:
可选的.表示不需要参数.如果使用,arglist中的所有后续参数也必须是可选的,并使用Optional关键字声明.请注意,Property Let表达式的右侧不可能是Optional.
以及来自vbusers.com的以下内容.没有在使用方式上解释太多.那么在从代码模块调用对象时如何传递可选参数...oObj.foo = ???
3)有更好的方法吗?...
我对oop有一个基本的了解(至少在vba中是如何实现的).有条件地将参数接受到对象中是否有更好的方法?
在使用VBA自动化Adobe Illustrator CS3时,我发现将布尔变量赋值给布尔属性会导致始终分配False:
Dim New_Path As Illustrator.PathItem
Dim v As Boolean
' ...
v = True
New_Path.Filled = v ' ERROR: New_Path.Filled is False
v = False
New_Path.Filled = v ' New_Path.Filled remains False
Run Code Online (Sandbox Code Playgroud)
分配给常量可以正常工作:
Dim New_Path As Illustrator.PathItem
' ...
New_Path.Filled = True ' New_Path.Filled is True
New_Path.Filled = False ' New_Path.Filled is False
Run Code Online (Sandbox Code Playgroud)
验证关于各种AI布尔属性如PathItem.Stroked,Layer.Visible等
已验证Photoshop.ArtLayer.Visible.
已验证VB6.
所以,我觉得这种行为在Adobe Adobe Creative Suite产品中很常见.
这是一个错误还是一个功能?