【问题标题】:VB: Assigning to a Boolean property in Adobe Illustrator, PhotoshopVB:在 Adob​​e Illustrator、Photoshop 中分配给布尔属性
【发布时间】:2015-02-13 11:37:43
【问题描述】:

在使用 VBA 自动化 Adob​​e 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

分配给常量可以正常工作:

Dim New_Path As Illustrator.PathItem
' ...
New_Path.Filled = True  ' New_Path.Filled is True
New_Path.Filled = False ' New_Path.Filled is False

已针对各种 AI 布尔属性进行验证,例如 PathItem.StrokedLayer.Visible 等。

验证Photoshop.ArtLayer.Visible

已针对 VB6 验证。

所以,我觉得这种行为在 Adob​​e Adob​​e Creative Suite 产品中很常见。

这是错误还是功能?

【问题讨论】:

  • 先尝试初始化它:Dim New_Path As New Illustrator.PathItem。你可以试试New_Path.Filled = Cbool(v)
  • 初始化做得很好但上面没有显示 - 不用担心!
  • Cbool 工作正常。我想知道为什么它会,而分配却没有。例如,为什么分配适用于 Office。无论如何,非常感谢!
  • 那么您会接受CBool() 解决方案作为答案吗?
  • 是的!我觉得这应该是自动化的一种常见做法......

标签: vba vb6 photoshop ui-automation adobe-illustrator


【解决方案1】:

CBool() function 包装v 变量。

【讨论】:

  • 为什么(反正它是一个布尔值)?
  • @Rob 我可能会根据这个简单的WHY 问题写一篇全新的文章......基本上在VBA the assignment to a LET property has a weird syntax to it under the hood 中。我相信(可能是错误的)这里发生的是 v 变量是通过引用而不是值传递的。将其转换为文字 True/False 可确保变量是通过值( True/False )而不是通过其在内存中的地址传递的(因此它不被视为 COM 对象)。
  • 基本上,您将v 传递给接受bool 类型的LET 属性,该类型不等同于VBA 的本机Boolean。它可能被 COM 服务器编组为object,因此无法直接转换为布尔值。我的意思是这只是我的猜测 - 如果有人能证明我错了,我会非常高兴。
  • 那么用 ( ) 包裹也可以吗?
猜你喜欢
  • 2011-05-02
  • 2021-09-27
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多