我在函数库中声明了一个二维数组,并将其与测试相关联。在测试的action1中,我尝试使用“erase”语句清除数组
我的代码 -
在函数库中,
Dim strVerifyAry(25,6)
在action1中,
erase strVerifyAry
错误消息
Run Error - Type mismatch: 'Erase'
如何清除此数组的内容?
答案 0 :(得分:4)
在普通的VBScript中为我工作,所以它很可能是QTP用于运行VBScript代码的引擎的问题。您应该能够模拟Erase
对于二维数组的行为,如下所示:
Sub EraseArray(ByRef arr)
For i = 0 To UBound(arr, 1)
For j = 0 To UBound(arr, 2)
If IsObject(arr(i, j)) Then
Set arr(i, j) = Nothing
Else
arr(i, j) = Empty
End If
Next
Next
End Sub
或者像这样,如果您不想将包含对象的字段设置为Nothing
:
Sub EraseArray(ByRef arr)
For i = 0 To UBound(arr, 1)
For j = 0 To UBound(arr, 2)
arr(i, j) = Empty
Next
Next
End Sub
答案 1 :(得分:1)
我不完全理解为什么,但你可以创建一个像
这样的子Public Sub DoErase (byRef Ary)
Erase Ary
End Sub
在库中,并在这样的动作中调用它:
DoErase StrVerifyAry
并且有效。
更新:不,不是。数组已成功传递给DoErase
,DoErase
调用正常,但之后的测试仍然可以引用Erase
应该擦除的数组元素。
如果测试声明了数组,它可以正常工作(Erase
删除元素。)
这很奇怪,可能与函数库中的古怪范围有关。
如果你发现这里发生了什么,请告诉我们......
答案 2 :(得分:0)
这让我疯了整整一个下午,所以我想发一个答案供将来参考。我使用Split命令填充了一个数组,然后需要在脚本再次循环回过程之前擦除它。我尝试过的任何内容都不会删除或清除数组,并且下一次使用Split只会附加到前面的数组元素中 通过尝试' array = Nothing'循环上面,我终于设法生成一个"这个数组被修复或锁定了#34;我研究过的错误。事实证明我已经在“For Each..Next'锁定阵列的循环,使其无法被擦除或清除。有关详细信息HERE:
答案 3 :(得分:0)
这是一个警察,我知道......不要投票给我!
在某些情况下,您可以使用Dictionary集合而不是数组。然后在要清除它时使用RemoveAll
。当您的数组是通过拆分函数创建时,这无济于事,但它可以帮助其他用例。
Set myDict = CreateObject("Scripting.Dictionary")
...
myDict.RemoveAll