Tạo nhập liệu ngày tháng bằng lịch

Liên hệ QC

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:
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

  • Ngay_thang_nam.rar
    26 KB · Đọc: 29
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
Web KT
Back
Top Bottom