Mục đích:
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)
Sẽ trở lại -1 cho arr1, nhưng "VBScript lỗi runtime: subscript ra khỏi phạm vi: 'UBound" cho arr2 và arr3.
Một chức năng mục đích chung để kiểm tra nếu một mảng là "Dimmed" hoặc "Empty" cũng nên (có thể) kiểm tra nếu biến thực sự là một mảng.
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)
Đối với tôi, 99% thời gian khi tôi đang kiểm tra nếu một mảng là "kích thước tương", là nếu tôi cần phải nhận được UBound của mảng và tôi muốn ngăn chặn một runtime lỗi trong các trường hợp trong đó mảng không được định kích thước. Vì vậy, tôi thường sẽ vượt qua UBound như một tham số như:
Function IsDimmedArray(arrParam, intUBoundParam)
intUBoundParam = 0
...
Tôi không biết nếu thực hành này thực sự tiết kiệm bất kỳ "Thời gian", nhưng nó tiết kiệm 1 dòng mã với gần như tất cả sử dụng, và là một cách dễ dàng để thực thi việc kiểm tra lỗi.
Ngoài ra, tôi đưa nó cho đầy đủ, nhưng trong thực tế, việc kiểm tra "UBound> = 0" trong IsDimmedArray:
If (llngError = 0) And (lintUBound >= 0) Then : IsDimmedArray = True
thường là không cần thiết vì thông thường nó sẽ được sử dụng trong những trường hợp như :
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
Vì vậy, trong trường hợp này, lintUBound = -1 và Đối ... Tiếp theo sẽ bị bỏ qua.
Có lẽ bạn nên được kiểm tra đầu vào của bạn trước khi chuyển đến Split() – Tester101
VBScript và VBA là khá tương tự, vì vậy xem http:// stackoverflow.com/questions/206324/how-to-check-cho-empty-array-in-vba-macro/206526 # 206526 – Fionnuala