Khi làm việc với dữ liệu trong Excel, chắc hẳn bạn đã từng muốn nhanh chóng cập nhật thông tin mà không cần phải nhập thủ công từng trường một. Một phương pháp khá tiện lợi là sử dụng UserForm để lấy dữ liệu bằng cách double click chuột vào một dòng trong bảng. Bài viết dưới đây sẽ hướng dẫn bạn cách thực hiện điều này trong VBA Excel.
1. Chuẩn Bị UserForm
Trước tiên, bạn cần chuẩn bị một UserForm. Nếu bạn chưa biết cách tạo UserForm, hãy tham khảo bài viết hướng dẫn cách tạo form nhập liệu cơ bản trong VBA Excel.
Giả sử rằng chúng ta có một bảng dữ liệu và một UserForm như sau:
Mục đích của chúng ta là khi double click vào một dòng bất kỳ trong bảng dữ liệu (trừ dòng tiêu đề), UserForm sẽ hiển thị và tự động lấy dữ liệu tại vị trí dòng double click đó vào các textbox tương ứng trong UserForm.
Hãy cùng tìm hiểu cách thực hiện điều này.
UserForm trong VBA Excel
2. Viết Lệnh Lấy Dữ Liệu Vào UserForm
Trong VBA, chúng ta có một đối tượng gọi là ActiveCell
. Đối tượng này ám chỉ vị trí mà người dùng đang chọn, và từ đó, chúng ta có thể lấy dữ liệu theo logic sau:
- Textbox Ngày sẽ lấy dữ liệu theo cột Ngày (cột A), dòng tại vị trí của ActiveCell.
- Textbox Loại sẽ lấy dữ liệu theo cột Loại (cột B), dòng tại vị trí của ActiveCell.
- Textbox Tên mặt hàng sẽ lấy dữ liệu theo cột Tên mặt hàng (cột C), dòng tại vị trí của ActiveCell.
- Textbox Số lượng sẽ lấy dữ liệu theo cột Số lượng (cột D), dòng tại vị trí của ActiveCell.
Lưu ý rằng chúng ta không xét vị trí cột của ActiveCell, vì cột luôn xác định ở đây, chỉ có dòng là thay đổi.
Logic trên có thể được biểu diễn bằng câu lệnh VBA như sau:
Private Sub UserForm_Initialize()
TextBox_Ngay.Value = ActiveCell.Offset(0, 0).Value
TextBox_Loai.Value = ActiveCell.Offset(0, 1).Value
TextBox_Ten_Mat_Hang.Value = ActiveCell.Offset(0, 2).Value
TextBox_So_Luong.Value = ActiveCell.Offset(0, 3).Value
End Sub
3. Tạo Sự Kiện Khi Sử Dụng Double Click Trong Sheet
a. Phân Tích Yêu Cầu và Tính Logic
Trong đối tượng worksheet có rất nhiều sự kiện, một trong số đó là sự kiện BeforeDoubleClick
. Sự kiện này được hiểu là trước khi hoàn thành thao tác double click trong sheet, Excel sẽ chạy một vài lệnh macro mà bạn đã lập trình.
Chúng ta muốn sử dụng sự kiện này để kích hoạt UserForm (UserForm1.Show) khi double click vào ô có dữ liệu.
Lưu ý rằng chỉ khi double click trong phạm vi bảng dữ liệu thì mới kích hoạt UserForm, bất kỳ vị trí nào khác (bao gồm dòng tiêu đề) sẽ không kích hoạt.
Với yêu cầu này, chúng ta cần có một câu lệnh để kiểm tra xem có nằm trong phạm vi bảng dữ liệu hay không.
- Số cột: Từ cột A đến cột D.
- Số dòng: Bắt đầu từ dòng 2, kết thúc tại dòng cuối cùng có dữ liệu trong bảng.
b. Lệnh Tìm Dòng Cuối Trong Bảng Dữ Liệu
Nếu bạn đã tìm hiểu về VBA thì hẳn bạn biết câu lệnh tìm dòng cuối. Đây là câu lệnh đặc trưng và thường được sử dụng trong lập trình VBA. Câu lệnh có dạng như sau:
Sheet_Name.Cells(Rows.Count, Column_Num).End(xlUp).Row
- Sheet_Name: tên của sheet chứa bảng dữ liệu.
- Rows.Count: đếm số dòng chứa giá trị.
- Column_Num: xác định trong cột nào.
- End(xlUp).Row: xét từ dòng cuối cùng trong sheet, tính ngược về vị trí dòng cuối có dữ liệu.
Ví dụ, để tìm dòng cuối tại Sheet1, cột A, câu lệnh sẽ như sau:
Dim DongCuoi As Long
DongCuoi = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
c. Lệnh Gọi UserForm Trong Vùng Bảng Dữ Liệu
Câu lệnh kiểm tra và gọi UserForm như sau:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim DongCuoi As Long
DongCuoi = Cells(Rows.Count, 1).End(xlUp).Row
If Not Intersect(Target, Range("A2:D" & DongCuoi)) Is Nothing Then
UserForm1.Show
End If
Cancel = True
End Sub
Trong đoạn mã trên, chúng ta kiểm tra xem ô double click có nằm trong vùng dữ liệu từ A2 đến D cuối cùng không. Nếu có, thì UserForm1 sẽ được gọi ra và hiển thị thông tin tương ứng với dòng đã được chọn.
Không khó phải không? Tôi tin rằng khi bạn đã hiểu tổng bộ nội dung trên và thực hành nhiều thì bạn sẽ thấy việc này trở nên rất đơn giản mà lại hiệu quả.
Bạn có thể tải về file mẫu tại địa chỉ: http://bit.ly/2sU3TLf.
Để tìm hiểu thêm nhiều kiến thức về VBA, bạn tham dự khóa học VBA101 – Tự động hóa Excel với lập trình VBA. Đây là khóa học rất hữu ích dành cho bạn: Ngoài kiến thức về kỹ thuật lập trình VBA, bạn còn được học thêm rất nhiều kiến thức khác liên quan đến VBA, ứng dụng VBA vào công việc. Hãy cùng khám phá nhé!