Catia VBA to .CATScript for type" Collection"

时间:2018-01-16 13:43:39

标签: vba vbscript catia

在我的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) 我不认为很容易得到一个像上面这样简单的代码来减去一个" key,item"从另一个清单 修复我的代码以便它在CAT / VB脚本中工作的最佳方法是什么? 我相信有可能使用数组,因为我在编码方面非常陌生,我认为在我尝试使用数组之前,我先问一下更好的方法。

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

2 个答案:

答案 0 :(得分:2)

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

'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”作为键

答案 1 :(得分:1)

对于发布的代码在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

此外,要添加到词典,与集合相比使用不同的语法:

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

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

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