Per:
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)
tornerà -1 per arr1, ma "errore di runtime VBScript: Indice fuori intervallo: 'UBound'" per arr2 e arr3.
Una funzione generica per verificare se un array è "Dimmer" o "Vuoto" dovrebbe anche (probabilmente) verificare se la variabile è effettivamente una matrice.
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)
Per me, il 99% del tempo in cui sto controllando se un array è "quotato", è se ho bisogno di ottenere l'UBound dell'array e voglio evitare che un runtime errore nei casi dove l'array non è quotato. Così io di solito passare l'UBound come parametro del tipo:
Function IsDimmedArray(arrParam, intUBoundParam)
intUBoundParam = 0
...
Non so se questa pratica in realtà salva qualsiasi "Time", ma lo fa risparmiare 1 riga di codice con quasi ogni uso, ed è un un modo semplice per applicare la pratica del controllo degli errori.
Inoltre, includo per completezza, ma in pratica, la verifica di "UBound> = 0" in IsDimmedArray:
If (llngError = 0) And (lintUBound >= 0) Then : IsDimmedArray = True
è in genere non è necessaria perché di solito sarà utilizzato in casi come :
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
Quindi, in questo caso, lintUBound = -1 e il For ... Next verrà ignorato.
Forse si dovrebbe essere il controllo il vostro input prima di passarlo a Split() – Tester101
VBScript e VBA sono abbastanza simili, in modo da vedere http:// StackOverflow.it/questions/206324/how-to-check-per-empty-array-in-vba-macro/206526 # 206526 – Fionnuala