
Chọn ngày trong Excel và VBA (Calendar Form)
Công cụ đề xuất để hỗ trợ chọn ngày trong Excel
Trước đây, tôi đã có một bài viết giới thiệu Date Picker Add-in để sử dụng trong môi trường Excel. Vì vậy, rất khó để chúng tôi xử lý nó trong môi trường VBA. Việc sử dụng lại nó trong Userforms có một số vấn đề.
vậy bây giờ Biểu mẫu lịch bộ chọn ngày có khác với một bổ trợ không? Nếu bạn đang học VBA, bạn sẽ quen thuộc với các khái niệm khác: Class, Userform, Module…
Tải về Calendar Form
Bạn có thể truy cập tại website chính chủ: https://trevoreyre.com/portfolio/excel-datepicker/
Link tải dự phòng: https://bit.ly/calendarfrm
Hướng dẫn cài đặt và sử dụng mẫu lịch.
- Sau khi tải về, bạn cần giải nén ra thư mục. (Bên trong sẽ có file CalendarForm v1.5.2.xlsm hướng dẫn và ví dụ cho bạn các thông số tương ứng).
- Ở file bạn cần sử dụng, bạn nhấn tổ hợp phím ALT + F11 để mở cửa sổ lập trình VBA.
- Ở cửa sổ Project Explorer (bạn có thể chọn menu View rồi chọn Project Explorer, phím tắt: CTRL+R)
- Bạn click phải Project bạn cần import, sau đó chọn Import File…
- Chọn file CalendarForm.frm mà bạn đã giải nén ở bước 1. Vậy là xong.
- Sau khi đã hoàn tất bước trên, bạn có thể sử dụng bằng cách khai báo biến, ra gọi nó ra.
Ví dụ về việc sử dụng biểu mẫu lịch
Ứng dụng macro để hiển thị DatePicker trong Excel Cells
Dưới đây là một đoạn mã mẫu mà tác giả đã thực hiện. Chúng ta có thể thấy rằng ô được gán H16 để sử dụng. chỉ cần gọi macro BasicCalendar Lưu ý, khi làm việc với nhiều sheet khác nhau, bạn nên xác định rõ các ô của sheet H16 ở đâu nhé! nhu la: Sheets("Sheet1").Range("H16") = dateVariable
Khi ô bạn đang sử dụng nằm trong một trang tính có tên là Sheet1
Sub BasicCalendar() dateVariable = CalendarForm.GetDate If dateVariable <> 0 Then Range("H16") = dateVariable End Sub
Ứng dụng được gán cho hộp văn bản trong Userform VBA
Đây là một macro mà tôi đã viết lại để sử dụng với các hộp văn bản, tương ứng với Check-in, Check-out được chọn, chúng tôi sẽ gọi lại macro sau mà không cần khai báo nó nhiều lần.
Private Sub checkin_Enter()
calDatepicker checkin
End Sub
Private Sub checkin_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
calDatepicker checkin
KeyAscii = 0
End Sub
Private Sub calDatepicker(ctlTextbox As Control)
Dim dteNgay As Date
dteNgay = IIF(ctlTextbox.value, ctlTextbox.value,Now())
dateVariable = CalendarForm.GetDate(SelectedDate:=dteNgay)
If dateVariable <> 0 Then ctlTextbox = dateVariable
End Sub
chúc may mắn.