相关疑难解决方法(0)

Let/Get Properties中的可选参数如何工作?

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

1)以下代码是否可能?...
基本上我有两个枚举,称之为eDATASETeDATATSUBSET.特定值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 properties optional-parameters

12
推荐指数
1
解决办法
7653
查看次数

VB:在Adobe Illustrator,Photoshop中分配布尔属性

在使用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 Adob​​e Creative Suite产品中很常见.

这是一个错误还是一个功能?

vb6 photoshop vba adobe-illustrator ui-automation

3
推荐指数
1
解决办法
182
查看次数