Giúp phân biệt Range và Variant trong VBA

Liên hệ QC

vanthinh3101

Thành viên tích cực
Tham gia
24/1/15
Bài viết
1,112
Được thích
1,436
Giới tính
Nam
Nghề nghiệp
Finance
Kính gửi mọi người,
Hiện tại tôi đang tìm hiểu và tự làm 1 số code VBA phục vụ cho công việc.
Sau khi tham khảo các bài viết, video, code VBA trên mạng tôi thấy khi xử lý các mảng dữ liệu thường có biến Range và Variant nhưng tôi không thể phân biệt được cũng như biết khi nào dùng Range, khi nào dùng Variant.
Xin mọi người chỉ dẫn giúp tôi về vấn đề này hoặc cho tôi xin link bài viết để tìm hiểu vấn đề này.
 
Range là chỉ mấy cái ô dữ liệu (một hoặc nhiều ô) trong sheet ấy bạn. Còn Variant là kiểu dữ liệu linh động, có thể chuyển đổi qua lại bất cứ kiểu dữ liệu nào khác như số, string, date v.v.v thậm chí cả class em nó cũng không tha --=0. Tôi mới tét thử một biến a kiểu Variant với đủ các kiểu mà nó chơi hết.&&^
Mã:
Sub v()
    Dim a
    a = 1
    Debug.Print a

    a = "tèo"
    Debug.Print a

    a = #1/1/2017#
    Debug.Print a

    Set a = New Cambodian 'Class Cambodian
    a.Someone.Hênô
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Range là chỉ mấy cái ô dữ liệu (một hoặc nhiều ô) trong bảng tính ấy bạn. Còn Variant là kiểu dữ liệu linh động, có thể chuyển đổi qua lại bất cứ kiểu dữ liệu nào khác như số, string, date v.v.v thậm chí cả class em nó cũng không tha --=0. Tôi mới tét thử một biến a kiểu Variant với đủ các kiểu mà nó chơi hết.&&^
Mã:
Sub v()
    Dim a
    a = 1
    Debug.Print a

    a = "tèo"
    Debug.Print a

    a = #1/1/2017#
    Debug.Print a

    Set a = New Cambodian 'Class Cambodian
    a.Someone.Hênô
End Sub
Cám ơn bạn, mình xin đưa ra ví dụ thực tế.
Hôm trước mình viết code như sau: Cells(i, 9).Value = Application.VLookup(Cells(i, 1).Value, cnquanly, 5, 0)
Nếu mình Dim cnquanly As Range thì hàm bị lỗi.
Nếu mình Dim cnquanly As Variant thì hàm đúng.
Rõ ràng trong trường hợp này, cnquanly là 1 vùng dữ liệu để tham chiếu, range hoàn toàn có thể được gán cho 1 vùng dữ liệu.
Bạn giải thích cho mình trường hợp này nhé!
 
Upvote 0
Vì không có code cụ thể nên không trả lời bạn chính xác được.-0-/.
Bạn hiểu đơn giản thế này. Variant là 1 kiểu linh động, thế nên khi bạn khai 1 biến kiểu Variant và gán cho một trị thì cái biến ấy tự chuyển thành kiểu của cái giá trị đó. Chẳng hạn gắn chuỗi thì nó chuyển qua kiểu chuỗi, gán số thì nó chuyển qua kiểu số... Còn với Range là một kiểu cụ thể. Nếu bạn gán một giá trị không đúng với kiểu Range thì có lỗi.
 
Upvote 0
Web KT
Back
Top Bottom