Khi sử dụng phần mềm hoặc một chương trình, có một thao tác khiến tôi rất thích dùng đó là bấm double click chuột tại 1 vị trí nhất định sẽ tự động hiện lên 1 form để sửa chữa, cập nhật lại dữ liệu. Sau đây tôi sẽ hướng dẫn các bạn cách làm đó trong VBA Excel.
Xem nhanh
Tất nhiên là chúng ta cần phải có sẵn userform từ trước rồi. Và các bạn hãy tự chuẩn bị sẵn 1 userform nhé. Nếu chưa biết cách tạo userform thì tham khảo bài viết:
Cách tạo form nhập liệu đơn giản trong VBA Excel
Giả sử chúng ta có 1 bảng dữ liệu và 1 userform tương ứng như sau:
Mục đích của chúng ta là khi double click vào 1 dòng bất kỳ trong bảng dữ liệu (trừ dòng tiêu đề) thì sẽ mở userform1 lên, và dữ liệu tại vị trí dòng double click đó sẽ được tự động lấy vào vị trí các textbox tương ứng trong userform.
Nghe thật hấp dẫn phải không nào? Hãy xem chúng ta sẽ làm việc đó thế nào nhé:
Trong VBA có 1 đối tượng là ActiveCell. Đối tượng này được hiểu là vị trí đang được người dùng chọn, tác động.
Theo logic chúng ta sẽ có là:
Ở đây chúng ta sẽ không xét vị trí cột của ActiveCell, bởi cột luôn xác định được cụ thể, trong khi ActiveCell có thể là vị trí bất kỳ, chỉ có dòng là giống nhau giữa các vị trí.
Logic trên được biểu diễn bằng câu lệnh VBA như sau:
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 Before DoubleClick
Sự kiện này được hiểu là trước khi hoàn thành thao tác double click trong Sheet thì Excel sẽ chạy 1 vài câu lệnh macro để khi hoàn tất thao tác double click thì cũng hoàn thành câu lệnh macro đó. Kết quả là bạn sẽ thấy khi double click chuột thì những điều bạn mong muốn sẽ được thực hiện một cách tự động.
Trong trường hợp này, chúng ta sẽ gán macro Mở userform (Userform1.Show) vào sự kiện này.
Nhưng có 1 lưu ý mà ngay từ ban đầu đã nói rõ: Chỉ double click trong phạm vi bảng dữ liệu thì mới mở userform, còn ngoài phạm vi này (bao gồm cả dòng tiêu đề) thì sẽ không mở userform.
Với yêu cầu trên thì chúng ta phải có 1 câu lệnh để biện luận xem phạm vi bảng tính tới đâu.
Như vậy ở đây chúng ta phải xét tới 1 biến là biến dòng cuối của bảng là dòng nào.
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 phải biết về câu lệnh tìm dòng cuối. Đây là câu lệnh đặc trưng và rất thường sử dụng trong lập trình VBA. Câu lệnh như sau:
Sheet_Name.Cells(Rows.Count, Column_Num).End(xlUp).Row
Như vậy viết câu lệnh tìm dòng cuối trong trường hợp này có thể viết như sau:
Xét dòng cuối tại Sheet1, cột A
c. Lệnh gọi userform trong vùng bảng dữ liệu
Câu lệnh giới hạn của chúng ta như sau:
Câu lệnh trên được hiểu là:
Không khó phải không nào. Tôi tin rằng khi bạn đã hiểu toàn 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 có hiệu quả rất lớn.
Các 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, mời 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 bẫy lỗi trong VBA chúng ta còn được học thêm rất nhiều kiến thức khác về VBA, ứng dụng VBA vào công việc. Hãy cùng khám phá nào: