Lập trình VBA: Có bao nhiêu cách để biết được mảng có kích thước hay không?

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,382
Được thích
3,538
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
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:
Web KT
Back
Top Bottom