【问题标题】:Catia VBA to .CATScript for type "Collection"Catia VBA 到 .CATScript 用于“集合”类型
【发布时间】:2018-01-16 13:43:39
【问题描述】:

在我的 VBA 代码中,我使用以下代码:

Dim docsToSave As Scripting.Dictionary
Set docsToSave = New Scripting.Dictionary

Dim toRemove As Collection
Set toRemove = New Collection

...
More Code
...

For i = 1 To toRemove.Count
    docsToSave.Remove (toRemove.Item(i))
Next

与字典相比,集合的好处在于您可以使用它们的项目编号来检索键。
我的问题是我需要将我的 VBA 代码转换为 CATScript(类似于 VBScript)。
我认为从另一个列表中减去一个“键、项”列表的代码并不容易获得像上面这样简单的代码。
修复我的代码以使其在 CAT/VB 脚本中工作的最佳方法是什么?
我相信使用 Array 可能是可行的,因为我通常在编码方面非常陌生,所以我想在尝试使其与 Arrays 一起使用之前,我会先在这里询问更好的方法。

编辑:
此问题与CATIA VBA Enable use of “Scripting.Dictionary” in .CATScript 不同,因为此问题专门要求提供有关如何在 VBScript 中使用字典的信息,以便复制现有 VBA 脚本中使用的集合的行为。

【问题讨论】:

  • VBA and VBScript share a lot of similarities 这意味着您应该能够毫无问题地转换代码。
  • “集合”在 VBScript 中不存在,不幸的是,我在这里使用集合的方式是字典无法实现的。
  • VBScript 不是强类型的,所以它不知道As Collection 是什么,一切都是Variant 数据类型。但它支持 COM,因此您没有理由无法访问 COM 可见的Collection 对象
  • 对,我缺少一些关于这一切如何运作的信息。你的 cmets 很有帮助。

标签: vba vbscript catia


【解决方案1】:

您要么必须使用数组,并在向其中添加和删除项目时自行管理调整大小,要么您可以使用字典并将键作为整数进行管理。我通常是后者。

'create dictionary
set dict = CreateObject("Scripting.Dictionary")

'add object
dict.add dict.count,objectOrValue

'loop
for i = 0 to dict.count -1
   objectOrValue = dict.item(i)
   ...
next

这应该很像从零开始的集合 如果您想保持 vba 集合的从一为基础的行为,请使用“dict.count+1”作为键

【讨论】:

  • 我明天会修改这个,感谢您的回复。
【解决方案2】:

为了使发布的代码在 VBScript 中的行为方式与在 VBA 中的行为方式相同,可以使用以下代码:

Dim docsToSave
Set docsToSave = CreateObject("Scripting.Dictionary")

Dim toRemove
Set toRemove = CreateObject("Scripting.Dictionary")

...
More Code
...

For i = 0 To toRemove.Count - 1
    docsToSave.Remove (toRemove.keys()(i))
Next

此外,要向 Dictionary 添加与 Collection 不同的语法:

'VBA-code for a collection:
toRemove.Add (x)

'VBScript for a dictionary:
Call toRemove.Add(x, i)

这些更改足以让我的 VBA 脚本在 VBScript 中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多