Tạo nhập liệu ngày tháng bằng lịch (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tiennam

Thành viên chính thức
Tham gia
7/9/07
Bài viết
96
Được thích
9
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)
rHH8DZ.png
 
Lần chỉnh sửa cuối:
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)
rHH8DZ.png
Cái vụ này thì phải dùng đến VBA chứ công thức thì bó tay.
Ví dụ 1 file như vầy, bạn tham khảo và phát triển theo ý của mình nhé.
 

File đính kèm

Upvote 0
Đú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?
 
Lần chỉnh sửa cuối:
Upvote 0
Đú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?
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.
 
Upvote 0
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).
 

File đính kèm

Upvote 0
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?
 
Upvote 0
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?

Không bao giờ sai, vì việc định dạng đã đặt sẳn trong Code ờ dòng sau:

ActiveCell.NumberFormat = "dd/mm/yyyy"

Bạn muốn định dạng khác đi thì sửa lại code trên.
 
Upvote 0
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 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?!.
 
Upvote 0
- 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?!.
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 đủ.
 
Upvote 0
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 đủ.
- Đã làm theo các bước "Bác hướng dẫn cho em" mà không Thấy!.
- Như vậy phải cài lại để bổ sung thêm hả bác!.
 
Upvote 0
Upvote 0
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 đủ.
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?
 
Upvote 0
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.
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ì?
 
Upvote 0
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.
 

File đính kèm

Upvote 0
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.

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
 
Upvote 0
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
MSCAL.HLP lấy ở đâu anh nhỉ?
Em có vào Program File của office tìm kiếm thì không thấy file này.
Lỗi khi làm theo bài #18
 

File đính kèm

  • Calendar Control_Fail.jpg
    Calendar Control_Fail.jpg
    38.8 KB · Đọc: 78
Lần chỉnh sửa cuối:
Upvote 0
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.
 
Upvote 0
Lỗi khi làm theo bài #18

Thế thì chắc liên quan bài 13 của topic bên kia
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
 
Upvote 0
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ì?
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).
 
Upvote 0
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).
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!
 
Upvote 0
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!
Bạn thêm câu lệnh này vào trong câu lệnh With Calendar1Sub Worksheet_SelectionChange là được:
Mã:
.Value = IIf(IsDate(Target), Target, Date)
 
Upvote 0
Bạn thêm câu lệnh này vào trong câu lệnh With Calendar1Sub Worksheet_SelectionChange là được:
Mã:
.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!.
HTML:
- Nếu trong ô đã có dữ liệu ngày rồi khi click chọn ô đó thì calendar để ở ngày đó
"Ngày trong ô đã có thì hiển ngược lại trên calendar" Thì phải làm thế nào a!.
 
Lần chỉnh sửa cuối:
Upvote 0
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!.
HTML:
- Nếu trong ô đã có dữ liệu ngày rồi khi click chọn ô đó thì calendar để ở ngày đó
"Ngày trong ô đã có thì hiển ngược lại trên calendar" Thì phải làm thế nào a!.
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
...
 
Upvote 0
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
...
- 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

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
- Thì vẫn chưa được các bác xem giúp em theo file đính kèm này với!.
- 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?.
 

File đính kèm

Upvote 0
- 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

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
- Thì vẫn chưa được các bác xem giúp em theo file đính kèm này với!.
- 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?.
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.
 
Upvote 0
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
Loay hoay với anh Google, làm theo cách này chuẩn rồi ạ:
FOR 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.
Nguồn: https://social.msdn.microsoft.com/F...trol-conversion-to-mscomct2ocx?forum=exceldev

Em làm thử đã chạy tốt, mọi người tham khảo.
 

File đính kèm

  • Calendar Control_OK.jpg
    Calendar Control_OK.jpg
    51.9 KB · Đọc: 69
Upvote 0
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ảm ơn bạn!. Vậy mà mình cứ nghĩ là bị lỗi!.
- Còn vân đề này
HTML:
- 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?.
Mình đã ghi trong file đính kèm Bạn xem giúp mình với!.
 
Upvote 0
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 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?
Tức là chỉ được ("B3:B30", "D3:D30") thôi, chư không đươc ("B3:B30", "D3:D30", "E3:E30"...)
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom