Por:
Dim arr1 : arr1 = Array()
Dim arr2
Dim arr3 : ReDim arr3(1) : Erase arr3
WScript.Echo UBound(arr1)
WScript.Echo UBound(arr2)
WScript.Echo UBound(arr3)
devolverá -1 para arr1, pero "error de ejecución de VBScript: Subíndice fuera del intervalo: 'UBound'" para arr2 y arr3.
Una función de propósito general para comprobar si una matriz está "atenuada" o "vacía" también debería (probablemente) probar si la variable es realmente una matriz.
Function IsDimmedArray(arrParam)
Dim lintUBound : lintUBound = 0
Dim llngError : llngError = 0
IsDimmedArray = False
If Not IsArray(arrParam) Then : Exit Function
'' Test the bounds
On Error Resume Next
lintUBound = UBound(arrParam)
llngError = Err.Number
If (llngError <> 0) Then : Err.Clear
On Error Goto 0
If (llngError = 0) And (lintUBound >= 0) Then : IsDimmedArray = True
End Function ' IsDimmedArray(arrParam)
Para mí, el 99% de las veces cuando estoy comprobando si una matriz es "acotado", es decir si necesito para obtener el UBound de la matriz y quiero evitar un tiempo de ejecución de errores en los casos donde la matriz no está dimensionada. Así que por lo general pasar el UBound como un parámetro como:
Function IsDimmedArray(arrParam, intUBoundParam)
intUBoundParam = 0
...
No sé si esta práctica ahorra realmente ninguna "Time", pero lo hace ahorrar 1 línea de código con casi cada uso, y es una forma fácil de aplicar la práctica de la comprobación de errores.
Además, lo incluyo por la totalidad, pero en la práctica, la comprobación de "UBound> = 0" en IsDimmedArray:
If (llngError = 0) And (lintUBound >= 0) Then : IsDimmedArray = True
es por lo general no es necesario porque por lo general se va a utilizar en casos como :
Dim arrX
Dim lintUBound
Dim intNdx
arrX = Array()
lintUBound = UBound(arrX)
WScript.Echo "arrX is an array with UBound=" & lintUBound
For intNdx = 0 to lintUBound
WScript.Echo "This will not print: " & intNdx
Next
Por lo tanto, en este caso, lintUBound = -1 y el Para ... a continuación se saltará.
Tal vez usted debe comprobar su entrada antes de pasarla a Split() – Tester101
VBScript y VBA son bastante similares, por lo que ver http://desbordamiento de pila.com/questions/206324/how-to-check-for-empty-array-in-vba-macro/206526 # 206526 – Fionnuala