⬆️ 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
- Mở Excel và nhấn ALT + F11 để mở VBA Editor.
- Chèn một Module mới (Insert > Module).
- Dán đoạn code trên vào Module.
- 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! 🚀