我正在尝试存储一个数组值,以便在Sub被多次调用时可以重用.如果值存在,我想阻止将值重新分配给数组.
我的代码是这样的.
Dim views()
Sub runit()
For i=0 To 3
test()
Next
End Sub
Sub test()
ReDim Preserve views(0)= "test"
' - other codes that I want to run-
End Sub
Run Code Online (Sandbox Code Playgroud)
我收到"类型不匹配:'chooseviews'"错误.
如果我在"子测试"中移动"Dim views()",我就不会收到错误.如何在VBScript中声明全局数组?如果不可能,有什么方法可以防止在调用Sub时重新分配数组?
以下代码不起作用,但您可能知道我正在尝试做什么.
Dim views()
Sub runit()
For i=0 To 3
test()
Next
End Sub
Function IsArrayDimmed(arr)
IsArrayDimmed = False
If IsArray(arr) Then
On Error Resume Next
Dim ub : ub = UBound(arr)
If (Err.Number = 0) And (ub >= 0) Then IsArrayDimmed = True
End If
End Function
Sub test()
If IsArrayDimmed(views) Then
Else
ReDim Preserve views(0)= "test"
End If
' - other codes that I want to run-
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
如果我理解正确,似乎你想要声明一个全局数组变量,然后将项添加到该数组,而不限于静态数量的元素.换句话说,您需要通过重新分配来动态增加数组的大小.
全局声明是正确的,属于您拥有它的地方:
Dim views()
Run Code Online (Sandbox Code Playgroud)
你在这里写的是不正确的语法,你不能同时分配一个值和ReDim:
ReDim Preserve views(0)= "test"
Run Code Online (Sandbox Code Playgroud)
此外,这将ReDim数组大小为0,这与您想要的相反.
如果你想在该数组上"推"值,你应该使用这样的函数来处理redim,以在将值添加到数组尾部之前增加数组的大小:
Function Push(ByRef arrTarget, ByVal varValue)
Dim intCounter
Dim intElementCount
ReDim Preserve arrTarget(UBound(arrTarget) + 1)
If (isObject(varValue)) Then
Set arrTarget(UBound(arrTarget)) = varValue
Else
arrTarget(UBound(arrTarget)) = varValue
End If
Push = arrTarget
End Function
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
Call Push(views,"test")
Run Code Online (Sandbox Code Playgroud)