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).
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2