Cái vụ này thì phải dùng đến VBA chứ công thức thì bó tay.Các bác cho mình hỏi, mình có cột D là cột ngày tháng, giờ không muốn nhập, khi di vào ô Dx chẳng hạn, thay vì nhập số thì có cách nào làm nó hiện ra được bảng lịch này để tích vào không? (Giống word)
![]()
Trước hết, bạn chọn tab Developer và nhấn nút Design Mode để chuyển sang chế độ thiết kế. Sau đó bạn copy cái Calendar qua file của bạn (dán vào sheet muốn áp dụng). Sau đó nhấn chuột phải tại tên sheet, chọn View code và copy toàn bộ code ở đó, nhấn đúp vào tên sheet muốn áp dụng code của bạn ở thanh bên trái trong cửa sổ VBA và dán đoạn code vừa copy vào khung bên phải. Tiếp theo, sửa chỗ [B4:B30] trong code thành địa chỉ tương ứng trên file của bạn. Cuối cùng, ra ngoài cửa sổ Excel, tắt chế độ Design Mode để chạy code.Đúng cái mình đang cần, cảm ơn bác nghiaphuc nhé, cái này giờ copy vào bảng của mình thì copy ntn bác?
Cho em hỏi thêm chút, do e đag onl bằng điện thoại nên chưa thử được. Việc nhập dữ liệu ngày theo calendar thế này có hạn chế đc việc nhập sai định dạng ko?Bạn xem hướng dẫn trong File đính kèm để biết cách tạo Calendar cho cột B của sheet Nhập dữ liệu. click vào tên sheet Nhập dữ liệu và click phải chuột chọn View Code (để xem code).
Cho em hỏi thêm chút, do e đag onl bằng điện thoại nên chưa thử được. Việc nhập dữ liệu ngày theo calendar thế này có hạn chế đc việc nhập sai định dạng ko?
- Cho em hỏi với: Sao em tìm trên Excel 2010 không Thấy có mục calender control?.Bạn xem hướng dẫn trong File đính kèm để biết cách tạo Calendar cho cột B của sheet Nhập dữ liệu. click vào tên sheet Nhập dữ liệu và click phải chuột chọn View Code (để xem code).
Bạn chọn tab Developer, nhấn nút Insert, nhấn tiếp nút More controls ở nhóm ActiveX Controls. Nếu có thì bạn sẽ nhìn thấy nó ngay, nếu không có thì có thể do bạn cài đặt Office không đầy đủ.- Cho em hỏi với: Sao em tìm trên Excel 2010 không Thấy có mục calender control?.
Không hiểu nó nằm chỗ nào?!.
- Đã làm theo các bước "Bác hướng dẫn cho em" mà không Thấy!.Bạn chọn tab Developer, nhấn nút Insert, nhấn tiếp nút More controls ở nhóm ActiveX Controls. Nếu có thì bạn sẽ nhìn thấy nó ngay, nếu không có thì có thể do bạn cài đặt Office không đầy đủ.
Bạn tham khảo Topic này xem sao: http://www.giaiphapexcel.com/forum/...Excel-2010-(32bit)-không-có-controls-Calendar- Cho em hỏi với: Sao em tìm trên Excel 2010 không Thấy có mục calender control?.
Không hiểu nó nằm chỗ nào?!.
Em đang dùng Win8.1 64bit, bộ Office 2013 32bit, tìm hoài trong More Control mà ko thấy cái Calendar đâu? ko biết tìm bộ cài ở đâu được?Bạn chọn tab Developer, nhấn nút Insert, nhấn tiếp nút More controls ở nhóm ActiveX Controls. Nếu có thì bạn sẽ nhìn thấy nó ngay, nếu không có thì có thể do bạn cài đặt Office không đầy đủ.
Bác cho e hỏi thêm là trong bảng của em, ngoài cột B ra thì các cột E, G chẳng hạn cũng muốn như thế, thì e chèn vào kiểu gì?Trước hết, bạn chọn tab Developer và nhấn nút Design Mode để chuyển sang chế độ thiết kế. Sau đó bạn copy cái Calendar qua file của bạn (dán vào sheet muốn áp dụng). Sau đó nhấn chuột phải tại tên sheet, chọn View code và copy toàn bộ code ở đó, nhấn đúp vào tên sheet muốn áp dụng code của bạn ở thanh bên trái trong cửa sổ VBA và dán đoạn code vừa copy vào khung bên phải. Tiếp theo, sửa chỗ [B4:B30] trong code thành địa chỉ tương ứng trên file của bạn. Cuối cùng, ra ngoài cửa sổ Excel, tắt chế độ Design Mode để chạy code.
Em đang dùng Win8.1 64bit, bộ Office 2013 32bit, tìm hoài trong More Control mà ko thấy cái Calendar đâu? ko biết tìm bộ cài ở đâu được?
Em vẫn chưa làm được anh Hải ạ,Win 64 thì phải làm khác tí tẹo mới được nhé. Mình đã từng bị vì cái vụ 32 và 64 đấy.
Win 64 thì phải thế này cơ C:\Windows\SysWoW64
Em vẫn chưa làm được anh Hải ạ,
Em đã giải nén copy 2 file này vào C:\Windows\SysWoW64\
Rồi Run: Regsvr32 MSCAL.OCX và Regsvr32 mscomct2.ocx
Đều bào lỗi.
MSCAL.HLP lấy ở đâu anh nhỉ?Lúc trước mình có làm và ghi lại thế này. Mình xài Win7 64 bit
- Copy 2 file MSCAL.HLP va2 MSCAL.OCX vào thư mục C:\Windows\SysWoW64
- tại khung search nhập vào CMD > Enter
-Tại dòng CMD line nhập: cd\windows\syswow64 > Enter
- nhập tiếp: regsvr32 mscal.ocx > Enter > xong
Theo mình nhớ thì phải chạy Cmd với chế độ Run as Asministrator.Lúc trước mình có làm và ghi lại thế này. Mình xài Win7 64 bit
- Copy 2 file MSCAL.HLP va2 MSCAL.OCX vào thư mục C:\Windows\SysWoW64
- tại khung search nhập vào CMD > Enter
-Tại dòng CMD line nhập: cd\windows\syswow64 > Enter
- nhập tiếp: regsvr32 mscal.ocx > Enter > xong
Lỗi khi làm theo bài #18
Mình chợt nghĩ ra có thể nguyên nhân là do UAC đang thiết lập ở mức cao chăng?
Thí nghiệm nhé:
- Bấm Start, gõ từ khóa Change User Account Control Settings vào khung Search rồi Enter
- Kéo thanh trượt xuống mức thấp nhất
- Khởi động lại máy tính
- Đăng ký lại file MSCAL.OCX như trên
Nếu thành công, lại mở cửa sổ UAC rồi kéo thanh trượt lên mức Default (mức 2 tính từ trên xuống)
Không chắc lắm nhưng cứ thử xem
Báo cáo vẫn đang để ở mức thấp nhất. vẫn lỗiThế thì chắc liên quan bài 13 của topic bên kia
Bạn sửa lại cái chỗ [B4:B30] thành [B4:B30,E4:E30,G4:G30] là được (số 4 và số 30 có thể thay bởi số khác tùy bạn).Bác cho e hỏi thêm là trong bảng của em, ngoài cột B ra thì các cột E, G chẳng hạn cũng muốn như thế, thì e chèn vào kiểu gì?
Giờ em có 2 tình huống sau:Bạn sửa lại cái chỗ [B4:B30] thành [B4:B30,E4:E30,G4:G30] là được (số 4 và số 30 có thể thay bởi số khác tùy bạn).
Bạn thêm câu lệnh này vào trong câu lệnh With Calendar1 ở Sub Worksheet_SelectionChange là được:Giờ em có 2 tình huống sau:
- Nếu trong ô đã có dữ liệu ngày rồi khi click chọn ô đó thì calendar để ở ngày đó
- Nếu trong ô chưa có dữ liệu gì thì mặc định là hôm nay.
Thì code phải sửa thế nào?
Mong mọi người giúp đỡ. Em cảm ơn!
.Value = IIf(IsDate(Target), Target, Date)
Em đã làm theo cách chỉnh code của Bác Phúc nhưng dòng này thì vẫn chưa đươc!.Bạn thêm câu lệnh này vào trong câu lệnh With Calendar1 ở Sub Worksheet_SelectionChange là được:
Mã:.Value = IIf(IsDate(Target), Target, Date)
- Nếu trong ô đã có dữ liệu ngày rồi khi click chọn ô đó thì calendar để ở ngày đó
Tôi làm theo cách của a NghiaPhuc được mà bạn.Em đã làm theo cách chỉnh code của Bác Phúc nhưng dòng này thì vẫn chưa đươc!."Ngày trong ô đã có thì hiển ngược lại trên calendar" Thì phải làm thế nào a!.HTML:- Nếu trong ô đã có dữ liệu ngày rồi khi click chọn ô đó thì calendar để ở ngày đó
...
With Calendar1
[COLOR=#ff0000] .Value = IIf(IsDate(Target), Target, Date)[/COLOR]
.Top = Target.Top
.Left = Target.Left
.Visible = True
End With
...
- Cụ thể mình ứng dụng vào file của mình và sửa code như sau:Tôi làm theo cách của a NghiaPhuc được mà bạn.
Mã:... With Calendar1 [COLOR=#ff0000] .Value = IIf(IsDate(Target), Target, Date)[/COLOR] .Top = Target.Top .Left = Target.Left .Visible = True End With ...
Private Sub Calendar1_Click()ActiveCell.Value = (Calendar1.Value) ActiveCell.NumberFormat = "dd"End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("J9:BS10")) Is Nothing Then Calendar1.Top = Target.Top + Target.Height Calendar1.Left = Target.Left + Target.Width / 2 - Calendar1.Width / 2 Calendar1.Visible = True Calendar1.Value = IIf(IsDate(Target), Target, Date) ElseIf Calendar1.Visible Then Calendar1.Visible = False End IfEnd Sub
Tôi thấy code chạy tốt đấy chứ bạn, vì một số ô bạn chỉ nhập nội dung là 04, thì làm sao nó hiểu đó là ngày 04 của tháng nào của năm nào, bạn phải nhập rõ nội dung dd/mm/yyyy vào, còn hiển thị bạn để định dạng dd thì nó mới chỉ ngày chính xác.- Cụ thể mình ứng dụng vào file của mình và sửa code như sau:
HTML:Private Sub Calendar1_Click()ActiveCell.Value = (Calendar1.Value) ActiveCell.NumberFormat = "dd"End Sub
- Thì vẫn chưa được các bác xem giúp em theo file đính kèm này với!.HTML:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("J9:BS10")) Is Nothing Then Calendar1.Top = Target.Top + Target.Height Calendar1.Left = Target.Left + Target.Width / 2 - Calendar1.Width / 2 Calendar1.Visible = True Calendar1.Value = IIf(IsDate(Target), Target, Date) ElseIf Calendar1.Visible Then Calendar1.Visible = False End IfEnd Sub
- Một vấn đề nữa là ngày trong file đính kèm mà em thường phải nhập và phải được thiết kế trước hàng năm (xem trước lịch và thiết kế vào mẫu): Nhưng nếu ngồi nhập chọn từng ngày như code trong file của em đã ứng dụng cũng rất lâu chưa nói là tích chon không chính xác dẫn đến sai ngày!.
- Rất mong được các bác giúp cách làm nhanh hơn?.
Loay hoay với anh Google, làm theo cách này chuẩn rồi ạ:Lúc trước mình có làm và ghi lại thế này. Mình xài Win7 64 bit
- Copy 2 file MSCAL.HLP va2 MSCAL.OCX vào thư mục C:\Windows\SysWoW64
- tại khung search nhập vào CMD > Enter
-Tại dòng CMD line nhập: cd\windows\syswow64 > Enter
- nhập tiếp: regsvr32 mscal.ocx > Enter > xong
Nguồn: https://social.msdn.microsoft.com/F...trol-conversion-to-mscomct2ocx?forum=exceldevFOR 64-BIT WINDOWS 7, HERE'S HOW:
(1) First, you must perform this on EVERY computer that has 2010
(2) Obtain MSCAL.OCX and the Help file. It's easy to find on the Web.
(3) Copy both files to the following directory: C:\Windows\SysWoW64
(4) Click the Windows 7 Start Button and in the Search area, type "command"
(5) The search will bring up a number of items, including "Command Prompt" at the top
(6) Right click the "Command Prompt" banner, and select "Run as Administrator"
(7) At the command prompt, enter: %systemroot%\SysWoW64\regsvr32.exe mscal.ocx
(8) This should successfully register your legacy MSCAL.OCX.
(9) This worked for me on a Vanilla install of 64-Bit Windows 7 and Excel 2010
FOR 32 BIT WINDOWS 7, HERE'S HOW:
(1) First, you must perform this on EVERY computer that has 2010
(2) Obtain MSCAL.OCX and the Help file. It's easy to find on the Web.
(3) Copy both files to the following directory: C:\Windows\System32
(4) Click the Windows 7 Start Button and in the Search area, type "command"
(5) The search will bring up a number of items, including "Command Prompt" at the top
(6) Right click the "Command Prompt" banner, and select "Run as Administrator"
(7) At the command prompt, enter: %systemroot%\System32\regsvr32.exe mscal.ocx
(8) This should successfully register your legacy MSCAL.OCX.
- Cảm ơn bạn!. Vậy mà mình cứ nghĩ là bị lỗi!.Tôi thấy code chạy tốt đấy chứ bạn, vì một số ô bạn chỉ nhập nội dung là 04, thì làm sao nó hiểu đó là ngày 04 của tháng nào của năm nào, bạn phải nhập rõ nội dung dd/mm/yyyy vào, còn hiển thị bạn để định dạng dd thì nó mới chỉ ngày chính xác.
- Một vấn đề nữa là ngày trong file đính kèm mà em thường phải nhập và phải được thiết kế trước hàng năm (xem trước lịch và thiết kế vào mẫu): Nhưng nếu ngồi nhập chọn từng ngày như code trong file của em đã ứng dụng cũng rất lâu chưa nói là tích chon không chính xác dẫn đến sai ngày!.
- Rất mong được các bác giúp cách làm khác nhanh hơn?.
Bác nghiaphuc cho mình hỏi, giờ cái của mình nó chỉ nhập 2 trường thôi, muốn lên 3-4 trường thì làm ntn?Bạn sửa lại cái chỗ [B4:B30] thành [B4:B30,E4:E30,G4:G30] là được (số 4 và số 30 có thể thay bởi số khác tùy bạn).