Khi ứng dụng VBA trong Excel, chúng ta có thể nhập dữ liệu trên 1 Sheet rồi lưu sang Sheet khác. Đã có rất nhiều bài viết trên Blog.hocexcel.online hướng dẫn bạn cách làm này. Nhưng làm thế nào để chúng ta có thể “nhặt” dữ liệu ra để sửa, sau khi sửa xong sẽ lưu lại đúng vị trí của dòng dữ liệu đó trong bảng tính? Trong bài viết này các bạn sẽ được tìm hiểu chi tiết cách làm.
Quy trình sửa dữ liệu trong lập trình VBACách viết code lấy dữ liệu cần sửa trong bảng tính Excel bằng VBA
Với bảng tính lớn, nhiều dữ liệu, việc sửa trực tiếp trong bảng đó sẽ dễ nhầm lẫn, sai vị trí.
Cách viết code lấy dữ liệu cần sửa trong bảng tính Excel bằng VBASửa dữ liệu thông thường, chúng ta chỉ việc vào trong bảng tính và sửa trực tiếp. Nhưng việc đó có một số hạn chế: Bạn không ghi nhận lại được thời điểm bạn sửa dữ liệu. Việc này dẫn tới bạn không biết việc sửa đó ảnh hưởng thế nào, từ khi nào tới các dữ liệu khác có liên quan (ví dụ như báo cáo từ dữ liệu đó sẽ có kết quả khác) Trong trường hợp bảng tính được khóa (Protect Sheet) thì không sửa trực tiếp được.
Chọn dòng dữ liệu cần sửa
Bước 1: Xây dựng cấu trúc bảng dữ liệu và Form sửa dữ liệu: Form sửa dữ liệu bạn có thể đặt tại Sheet khác hoặc sử dụng UserForm. Trong ví dụ này làm chung trong 1 Sheet để dễ theo dõi. Ví dụ chúng ta có bảng tính như sau: Trong hình trên, chúng ta thấy có 2 phần:
Kèm với đó là 3 nút lệnh (Sử dụng chức năng Insert > Shape để tạo ra các nút lệnh này) ActiveCell.Row Mũi tên từ trái sang phải: Đại diện cho lệnh Lấy dữ liệu để sửa. Khi bấm (click) vào mũi tên đó sẽ thực thi câu lệnh lấy dòng dữ liệu cần sửa tại bảng Dữ liệu nhân sự vào Form Sửa thông tin. Dấu X: Đại diện cho lệnh xóa nội dung bên trong Form Sửa thông tin LayDuLieu() Mũi tên từ phải sang trái: Đại diện cho lệnh Lưu dữ liệu sau khi sửa. Khi bấm vào mũi tên này sẽ thực thi lệnh lưu nội dung từ Form sửa thông tin vào đúng vị trí dòng dữ liệu đã lấy ra để sửa. Lưu ý: Form sửa dữ liệu bạn có thể đặt tại Sheet khác hoặc sử dụng UserForm. Trong ví dụ này làm chung trong 1 Sheet để dễ theo dõi. DongSua As Long Bước 2: Viết code lấy dữ liệu vào Form sửa thông tin Gồm các lệnh: Xác định vị trí dòng chứa thông tin cần sửa
‘2. Lệnh lấy dữ liệu theo dòng cần sửa Sub LayDuLieu() LayDuLieu() Mũi tên từ phải sang trái: Đại diện cho lệnh Lưu dữ liệu sau khi sửa. Khi bấm vào mũi tên này sẽ thực thi lệnh lưu nội dung từ Form sửa thông tin vào đúng vị trí dòng dữ liệu đã lấy ra để sửa. Lưu ý: Form sửa dữ liệu bạn có thể đặt tại Sheet khác hoặc sử dụng UserForm. Trong ví dụ này làm chung trong 1 Sheet để dễ theo dõi. DongSua As Long Bước 2: Viết code lấy dữ liệu vào Form sửa thông tin Gồm các lệnh: Gồm các lệnh: Xác định vị trí dòng chứa thông tin cần sửa Lấy nội dung tương ứng theo từng cột tại dòng chứa thông tin cần sửa vào Form 1. Khi bấm chuột chọn vào dòng cần sửa, chúng ta có câu lệnh xác định số dòng theo ô được chọn là: Gán 1 biến đại diện cho giá trị này là DongSua, ta có: Sub XoaDuLieu() XoaDuLieu() With Sheet1 .Range(“J2, H5:L5, H8:L8”).ClearContents End With End Sub Gán macro XoaDuLieu vào biểu tượng Shape hình X bằng Assign Macro tương tự như trong bước 2 nhé. Bước 4: Viết code lưu nội dung trong Form sửa trở lại dòng chứa dữ liệu cần sửa Để lưu nội dung từ Form sửa trở lại bảng dữ liệu, chúng ta thực hiện viết giống như lệnh lấy dữ liệu từ Bảng sang Form sửa, nhưng thứ tự ngược lại như sau: Sub LuuDuLieu() LuuDuLieu() ‘Khai báo biến xác định dòng sửa = dòng lưu dữ liệu Dim DongSua As Long DongSua = Sheet1.Range(“J2”).Value ‘Thực hiện lưu dữ liệu từ Form sửa vào bảng dữ liệu theo dòng sửa With Sheet1 .Range(“A” & DongSua).Value = .Range(“H5”).Value .Range(“B” & DongSua).Value = .Range(“J5”).Value .Range(“C” & DongSua).Value = .Range(“H8”).Value .Range(“D” & DongSua).Value = .Range(“J8”).Value .Range(“E” & DongSua).Value = .Range(“L8”).Value End With ‘Gọi lệnh Xóa dữ liệu trong Form sửa sau khi đã hoàn thành việc lưu dữ liệu Call XoaDuLieu ‘Mở thông báo bằng msgbox về việc đã lưu thành công Msgbox “Luu du lieu thanh cong” End Sub Gán macro XoaDuLieu vào biểu tượng Shape hình X bằng Assign Macro tương tự như trong bước 2 nhé. Bước 4: Viết code lưu nội dung trong Form sửa trở lại dòng chứa dữ liệu cần sửa Để lưu nội dung từ Form sửa trở lại bảng dữ liệu, chúng ta thực hiện viết giống như lệnh lấy dữ liệu từ Bảng sang Form sửa, nhưng thứ tự ngược lại như sau:
Dim DongSua As Long DongSua = Sheet1.Range(“J2”).Value LayDuLieu() ‘Thực hiện lưu dữ liệu từ Form sửa vào bảng dữ liệu theo dòng sửa With Sheet1 .Range(“A” & DongSua).Value = .Range(“H5”).Value .Range(“B” & DongSua).Value = .Range(“J5”).Value .Range(“C” & DongSua).Value = .Range(“H8”).Value .Range(“D” & DongSua).Value = .Range(“J8”).Value .Range(“E” & DongSua).Value = .Range(“L8”).Value End With Sheet1.Protect End Sub ‘Gọi lệnh Xóa dữ liệu trong Form sửa sau khi đã hoàn thành việc lưu dữ liệu |