Table VBA

⬆️ Tình Huống Giả Định

Bạn có một bảng (Table – ListObject) trong Excel với tên “tbPhieuYeuCau”, nằm trên Sheet “Phieu Yeu Cau”.

Bạn sử dụng VBA để thêm dữ liệu vào dòng tiếp theo của bảng, nhưng Excel không tự động mở rộng bảng để bao gồm dòng mới này. Điều này gây ra lỗi hoặc khiến các công thức, biểu đồ, Pivot Table không cập nhật dữ liệu mới.


🎯 Mục tiêu

Viết một macro VBA để tự động mở rộng bảng sau khi chèn dữ liệu mới bằng VBA, đảm bảo bảng luôn bao phủ toàn bộ vùng dữ liệu.


👉 Code VBA Hoàn Chỉnh

Sub MoRongBang()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim fullRange As Range

    ' Gán Sheet chứa bảng
    Set ws = Sheets("Phieu Yeu Cau")
    
    ' Xác định bảng tbPhieuYeuCau
    Set lo = ws.ListObjects("tbPhieuYeuCau")
    
    ' Xác định vùng dữ liệu đầy đủ
    Set fullRange = ws.Range("A1").CurrentRegion
    
    ' Mở rộng bảng đến hết dữ liệu
    lo.Resize fullRange
    
    ' Giải phóng bộ nhớ
    Set ws = Nothing
    Set lo = Nothing
    Set fullRange = Nothing
End Sub

🔎 Giải Thích Chi Tiết

1. Vì Sao Bảng Không Tự Mở Rộng Khi Dùng VBA?

  • Khi nhập dữ liệu thủ công, Excel sẽ tự động mở rộng bảng.
  • Khi thêm dữ liệu bằng VBA, Excel không nhận diện dòng mới là một phần của bảng.

📝 Ví dụ:

Sheets("Phieu Yeu Cau").Range("A100").Value = "Dữ liệu mới"
  • Dù dòng 100 nằm ngay bên dưới bảng, Excel vẫn không coi nó là một phần của bảng.

2. Cách Xác Định Vùng Dữ Liệu Hiện Có

Set fullRange = ws.Range("A1").CurrentRegion
  • CurrentRegion giúp chọn toàn bộ vùng dữ liệu liên tục từ ô A1.
  • Nếu dữ liệu mở rộng hoặc co lại, CurrentRegion sẽ tự động chọn phạm vi phù hợp.

3. Cập Nhật Kích Thước Bảng

lo.Resize fullRange
  • Resize cập nhật kích thước bảng để bao phủ toàn bộ vùng dữ liệu hiện có (fullRange).

4. Giải Phóng Bộ Nhớ

Set ws = Nothing
Set lo = Nothing
Set fullRange = Nothing
  • Tránh giữ dữ liệu cũ trong bộ nhớ VBA, giúp macro chạy mượt hơn.

🚀 Cách Sử Dụng Macro VBA

  1. Mở Excel và nhấn ALT + F11 để mở VBA Editor.
  2. Chèn một Module mới (Insert > Module).
  3. Dán đoạn code trên vào Module.
  4. Sau khi thêm dữ liệu bằng VBA, chạy macro MoRongBang (Ấn F5).

📘 Hoặc gọi macro ngay sau khi thêm dữ liệu:

Sub ThemDuLieuMoi()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim newRow As ListRow
    
    Set ws = Sheets("Phieu Yeu Cau")
    Set lo = ws.ListObjects("tbPhieuYeuCau")
    
    Set newRow = lo.ListRows.Add
    newRow.Range.Cells(1, 1).Value = "3"
    newRow.Range.Cells(1, 2).Value = "Minh"
    newRow.Range.Cells(1, 3).Value = "28"
    
    Call MoRongBang
End Sub

💪 Giờ bảng của bạn luôn tự động mở rộng! 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *