5

我在函数库中声明了一个二维数组并将其与测试相关联。在测试的 action1 中,我尝试使用“erase”语句清除数组。
我的代码 -
在函数库中,

Dim strVerifyAry(25,6)

在行动1中,

erase strVerifyAry

错误信息

Run Error - Type mismatch: 'Erase'

如何清除这个数组的内容?

4

4 回答 4

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
于 2013-06-05T11:08:14.887 回答
1

我不完全明白为什么,但你可以创建一个像

Public Sub DoErase (byRef Ary)
   Erase Ary
End Sub

在库中,并从这样的操作中调用它:

DoErase StrVerifyAry

那行得通。

更新:不,它没有。数组成功传递给DoEraseDoErase调用工作正常,但之后的测试仍然可以引用Erase应该被擦除的数组元素。

如果测试声明了数组,它工作正常(Erase删除元素)。

这很奇怪,可能与函数库中古怪的作用域有关。

如果您知道这里发生了什么,请告诉我们...

于 2013-06-05T10:27:38.567 回答
0

这让我整个下午都发疯了,所以我想发布一个答案以供将来参考。我使用 Split 命令填充了一个数组,然后需要在脚本再次循环执行该过程之前擦除它。我尝试过的任何操作都不会擦除或清除数组,并且下一次使用 Split 只是附加到前面的数组元素中。
通过尝试上面的“array=Nothing”循环,我终于设法生成了一个我研究过的“这个数组是固定的或锁定的”错误。原来我在“For Each..Next”循环中使用了该数组,该循环锁定了该数组,因此无法擦除或清除它。更多信息可在此处获得:

于 2014-08-13T01:26:37.277 回答
0

这是一个警察,我知道......不要投票给我!

在某些情况下,您可以使用 Dictionary 集合而不是数组。然后RemoveAll在您想清除它时使用。当您的数组是由拆分函数或其他什么创建时,这无济于事,但它可以在其他用例中提供帮助。

Set myDict = CreateObject("Scripting.Dictionary")
...
myDict.RemoveAll

参考:https ://www.w3schools.com/asp/asp_ref_dictionary.asp

于 2017-07-01T00:35:46.793 回答