HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
- Tham gia
- 24/2/13
- Bài viết
- 2,589
- Được thích
- 3,979
- Giới tính
- Nam
Bài viết hôm nay của tôi, giúp các bạn củng cố thêm một kiến thức tuy đơn giản, nhưng có thể các bạn chưa biết về cách xác định mảng có kích thước hay không.
Hiện tại các bạn ai cũng biết để xác định mảng có kích thước hay không thì sử dụng phương thức Lbound và Ubound trong VBA.
Nhưng hai phương thức này chỉ cho ta biết được mảng có kích thước hay không khi phải dùng bẫy lỗi.
Ví dụ 1: Sử dụng bẫy lỗi để vượt qua lỗi mảng không có kích thước
Ví dụ 2: Sử dụng toán tử Not để xác định
Các bạn nên biết rằng bẫy lỗi làm chậm chương trình, nên sử dụng bẫy lỗi phải phù hợp.
bẫy lỗi không nên bật trong một vòng lặp, không gọi lại quá trình bật bẫy lỗi nhiều lần. Hãy sử dụng Err.Clear để trả lỗi về 0 thay vì sử dụng On Error Goto 0
Còn một cách nữa là sử dụng API win32, nhưng cách này không cần thiết trong VBA.
Tôi biết được có 3 cách để biết được một mảng có kích thước hay không, còn bạn thì sao?
Các bạn có thể tham khảo thêm các bài viết của tôi tại tag #sanbi udf
Hiện tại các bạn ai cũng biết để xác định mảng có kích thước hay không thì sử dụng phương thức Lbound và Ubound trong VBA.
Nhưng hai phương thức này chỉ cho ta biết được mảng có kích thước hay không khi phải dùng bẫy lỗi.
Ví dụ 1: Sử dụng bẫy lỗi để vượt qua lỗi mảng không có kích thước
JavaScript:
Sub checkDims_1()
On Error Resume Next
Dim arr(), C&
Redim Arr(1 to 10)
Debug.Print "Dims_1: "; Ubound(Arr)
Erase Arr: C = Ubound(Arr)
Debug.Print "Dims_2: "; C
End Sub
Ví dụ 2: Sử dụng toán tử Not để xác định
JavaScript:
Sub checkDims_2()
Static arr()
If Not Not Arr Then
ReDim Preserve Arr(1 to 10)
Else
ReDim Arr(1 to 1)
End If
End Sub
Private Sub ArrayDims()
Dim a() As String: Debug.Print " String: "; Not Not a
Dim a1(1) As String: Debug.Print " String: "; Not Not a1, UBound(a1)
Dim a2(1, 2) As String: Debug.Print " String: "; Not Not a2, UBound(a2)
Dim a3(1, 2, 2) As String: Debug.Print " String: "; Not Not a3, UBound(a3)
Dim b(2) As Byte: Debug.Print " Byte: "; Not Not b, UBound(b)
Dim c(3) As Integer: Debug.Print " Integer: "; Not Not c, UBound(c)
Dim d(4) As Long: Debug.Print " Long: "; Not Not d, UBound(d)
#If Win64 Then
Dim i(5) As LongPtr: Debug.Print " LongPtr: "; Not Not i, UBound(i)
Dim j(6) As LongLong: Debug.Print "LongLong: "; Not Not j, UBound(j)
#End If
Dim e(7) As Single: Debug.Print " Single: "; Not Not e, UBound(e)
Dim f(8) As Double: Debug.Print " Double: "; Not Not f, UBound(f)
Dim g(9) As Currency: Debug.Print "Currency: "; Not Not g, UBound(g)
Dim h(10) As Boolean: Debug.Print " Boolean: "; Not Not h, UBound(h)
Dim k(11) As Variant: Debug.Print " Variant: "; Not Not k, UBound(k)
Dim l(12) As Object: Debug.Print " Object: "; Not Not l, UBound(l)
End Sub
Các bạn nên biết rằng bẫy lỗi làm chậm chương trình, nên sử dụng bẫy lỗi phải phù hợp.
bẫy lỗi không nên bật trong một vòng lặp, không gọi lại quá trình bật bẫy lỗi nhiều lần. Hãy sử dụng Err.Clear để trả lỗi về 0 thay vì sử dụng On Error Goto 0
Còn một cách nữa là sử dụng API win32, nhưng cách này không cần thiết trong VBA.
Tôi biết được có 3 cách để biết được một mảng có kích thước hay không, còn bạn thì sao?
Các bạn có thể tham khảo thêm các bài viết của tôi tại tag #sanbi udf
Lần chỉnh sửa cuối: