Thông báo xác nhận thông tin trước khi xóa nội dung bằng VBA
Khi thực hiện việc quản lý dữ liệu bằng VBA trong Excel, ngoài yêu cầu Thêm mới, cập nhật nội dung của dữ liệu thì chúng ta còn cần đến một yêu cầu: Xóa dữ liệu. Tuy nhiên việc xóa dữ liệu phải hết sức thận trọng để tránh việc lỡ tay xóa nhầm nội dung, hoặc muốn thực hiện lệnh khác mà lỡ tay ...
Khi thực hiện việc quản lý dữ liệu bằng VBA trong Excel, ngoài yêu cầu Thêm mới, cập nhật nội dung của dữ liệu thì chúng ta còn cần đến một yêu cầu: Xóa dữ liệu.
Tuy nhiên việc xóa dữ liệu phải hết sức thận trọng để tránh việc lỡ tay xóa nhầm nội dung, hoặc muốn thực hiện lệnh khác mà lỡ tay bấm phải lệnh xóa. Vì vậy chúng ta thường phải có thêm bước xác nhận thông tin trước khi cho phép thực hiện lệnh xóa dữ liệu. Đây là một biện pháp cần thiết và rất quan trọng khi làm việc với dữ liệu trong Excel, đặc biệt là khi quản lý những dữ liệu quan trọng.
Sau đây chúng ta cùng tìm hiểu kỹ thuật này bằng 2 cách: sử dụng MessengerBox và sử dụng UserForm
Sử dụng MessengerBox (msgbox)
Tạo 1 msgbox bao gồm lựa chọn Yes/No như sau:
msgbox(Nội dung của thông báo , vbOKCancel + vbInformation + vbDefaultButton2, Tiêu đề của msgbox)
Các đối tượng:
- Nội dung của thông báo: Có tác dụng nêu thông tin cảnh báo người dùng, ví dụ như: “Bạn có chắc chắn xóa dòng… không?”. Nội dung này được đặt trong dấu nháy kép. Có thể kết hợp với biến số dòng để chỉ rõ dòng được xóa là dòng nào
- vbOKCancel: là tạo thêm 2 nút bấm chọn Ok / Cancel
- vbInformation: là loại cảnh báo khi hiện msgbox, có các dạng cảnh báo lỗi, chú ý, nhắc nhở… Mỗi loại cảnh báo sẽ kèm theo âm thanh khác nhau. Trường hợp này có thể chọn loại “Thông tin cần lưu ý, nhắc nhở” để yêu cầu xác nhận lại thông tin, không phải là lỗi.
- vbDefaultButton2: là nút bấm được ưu tiên. Trong vbOkCancel có 2 nút bấm là OK/Cancel nên sẽ có 2 đối tượng được ưu tiên là Button1 (OK) và Button2 (Cancel) => Trường hợp này chúng ta có thể ưu tiên cho nút Cancel vì mục đích xác nhận lại thông tin thì muốn xác nhận đúng bắt buộc phải có sự chủ động chọn OK chứ không ưu tiên cho nút OK
- Tiêu đề của msgbox: là nội dung ở khung tiêu đề khi msgbox xuất hiện. Chúng ta có thể đặt tiêu đề để nhận diện msgbox
Ngoài ra để thực hiện lệnh xóa chúng ta còn cần phải viết riêng lệnh xóa để giúp cho việc trình bày câu lệnh VBA được rõ ràng hơn.
Dưới đây là 2 câu lệnh được viết mẫu để các bạn tham khảo cách viết:
Ưu điểm
- Viết trực tiếp trong câu lệnh nên không mất thời gian, mà hiệu quả cũng tương đương các phương pháp khác
- Xây dựng msgbox đơn giản, không cần nhiều lệnh như dùng userform
Nhược điểm
- Không viết được tiếng việt trong msgbox (có thể khắc phục được bằng 1 vài cách)
Sử dụng UserForm
Thay vì gọi là 1 msgbox thì chúng ta có thể gọi ra 1 UserForm.
Ưu điểm của UserForm là chúng ta có thể thiết lập định dạng, trang trí cho UserForm đẹp hơn so với Msgbox, và còn có thể viết trực tiếp tiếng việt trong Label của UserForm. Tuy nhiên việc định dạng, trang trí và viết lệnh trong UserForm phức tạp hơn so với msgbox, do đó tùy từng tính chất công việc thì chúng ta có thể lựa chọn cách sử dụng msgbox hay UserForm cho phù hợp.
Cách làm như sau:
Bước 1: tạo mới 1 UserForm bằng cách chọn Insert / UserForm trong cửa sổ Properties của VBA
Bước 2: Trong UserForm chúng ta tạo các Label và CommandButton như sau:
Tạo 3 Label, trong đó Label2 sẽ dùng để lấy giá trị số dòng được chọn khi thực hiện gọi lệnh xóa
Tạo 2 CommandButton, thực hiện 2 lệnh riêng biệt: Ok / Cancel. Tùy vào mỗi nút lệnh chúng ta sẽ gán Macro câu lệnh tương ứng.
Bước 3: Xây dựng các Macro:
- Lấy số dòng được chọn cho Label2
- Lệnh đóng UserForm khi chọn CommandButton2 (Cancel)
- Lệnh xóa dữ liệu khi chọn CommandButton1 (OK)
- Lệnh mở UserForm
Bước 4: Gán nút lệnh mở UserForm cho nút Xóa
- Vẽ nút lệnh Xóa bằng chức năng Insert/Shapes
- Gán Macro ThongBao_XoaDong02 vào nút Xóa bằng AssignMacro
Kết luận
Việc xóa dữ liệu là một công việc thường xuyên gặp khi làm việc với VBA, do đó kỹ thuật này cần nắm vững để có thể xử lý cho tốt.
Msgbox là một đối tượng khá hữu ích khi xử lý nội dung này, đặc biệt hiệu quả khi chúng ta sử dụng tiếng anh cho nội dung thông báo (tránh được lỗi hiển thị tiếng việt)
UserForm sẽ hữu ích khi thao tác xóa phức tạp, có nhiều lựa chọn xóa khác nhau vì có thể gắn với nhiều CommandButton, còn msgbox thì khá hạn chế, chỉ áp dụng khi các quy ước đã rõ ràng.
Chúc các bạn học tốt cùng Học Excel Online
Tải về file mẫu tại địa chỉ: http://bit.ly/2BoZ6nl