Chào các anh em trong diễn đàn,
Mình mới tìm hiểu sâu hơn về VBA và có một tình huống khá hay muốn chia sẻ và cũng muốn học hỏi thêm từ mọi người. Công việc của mình thỉnh thoảng phải cập nhật báo cáo với biểu đồ dựa trên dữ liệu thay đổi liên tục, mà cứ mỗi lần dữ liệu thay đổi là phải ngồi vẽ lại biểu đồ mệt lắm.
Sau một thời gian mày mò, mình đã viết được một đoạn code VBA nhỏ để tự động hóa việc này. Ý tưởng là mình sẽ định nghĩa sẵn một vùng dữ liệu nguồn, và khi dữ liệu trong vùng đó thay đổi (ví dụ: thêm dòng mới, sửa dữ liệu), code sẽ tự động cập nhật biểu đồ tương ứng. Nó giúp mình tiết kiệm kha khá thời gian mỗi khi cần báo cáo nhanh.
Cụ thể, mình dùng các hàm như ChartObjects, SetSourceData và một chút logic để kiểm tra xem vùng dữ liệu nguồn có thay đổi gì không. Nếu có, nó sẽ cập nhật lại SourceData của biểu đồ.
Đây là đoạn code cơ bản mình đang dùng:
Sub UpdateChart()
Dim wsData As Worksheet
Dim wsChart As Worksheet
Dim chtObj As ChartObject
Dim dataRange As Range
Set wsData = ThisWorkbook.Sheets("Sheet1") ' Sheet chứa dữ liệu
Set wsChart = ThisWorkbook.Sheets("Sheet2") ' Sheet chứa biểu đồ
' Xác định vùng dữ liệu nguồn (ví dụ: từ A1 đến B10, có thể điều chỉnh cho động hơn)
Set dataRange = wsData.Range("A1:B10")
On Error Resume Next
Set chtObj = wsChart.ChartObjects("MyChart") ' Tên của biểu đồ bạn đặt trong Excel
On Error GoTo 0
If Not chtObj Is Nothing Then
chtObj.Chart.SetSourceData Source:=dataRange
MsgBox "Biểu đồ đã được cập nhật!"
Else
MsgBox "Không tìm thấy biểu đồ có tên 'MyChart'. Vui lòng kiểm tra lại tên biểu đồ."
End If
Set wsData = Nothing
Set wsChart = Nothing
Set dataRange = Nothing
Set chtObj = Nothing
End SubMọi người có cao kiến gì để làm cho đoạn code này linh hoạt hơn không, ví dụ như tự động nhận diện vùng dữ liệu thay đổi mà không cần định nghĩa cứng? Hoặc có cách nào khác tối ưu hơn không? Rất mong được các cao thủ chỉ giáo!