Pour:
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)
retournera -1 pour arr1, mais "erreur d'exécution VBScript: Subscript hors de portée:« UBound" pour arr2 et arr3.
Une fonction d'usage général permettant de tester si un tableau est "Affiné" ou "Vide" devrait également (probablement) tester si la variable est réellement un tableau.
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)
Pour moi, 99% du temps quand je vérifie si un tableau est « Dimensionné », est si je dois obtenir le UBound du tableau et je veux éviter que l'exécution d'erreur dans les cas où le tableau n'est pas dimensionné. Je vais donc passer généralement le UBound comme paramètre comme:
Function IsDimmedArray(arrParam, intUBoundParam)
intUBoundParam = 0
...
Je ne sais pas si cette pratique sauve en fait une « Time », mais il fait économiser 1 ligne de code avec presque chaque utilisation, et est un moyen facile d'imposer la pratique de la vérification des erreurs.
Aussi, je l'inclure pour être complet, mais dans la pratique, la vérification des « UBound> = 0 » à IsDimmedArray:
If (llngError = 0) And (lintUBound >= 0) Then : IsDimmedArray = True
est généralement pas nécessaire parce que généralement il sera utilisé dans des cas comme :
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
Ainsi, dans ce cas, lintUBound = -1 et For ... Next sera sautée.
Peut-être que vous devriez vérifier votre entrée avant de la transmettre à Split() – Tester101
VBScript et VBA sont assez similaires, donc voir http:// stackoverflow.com/questions/206324/how-to-check-for-empty-array-in-vba-macro/206526 # 206526 – Fionnuala