Xin chào Thầy Cô và Anh Chị trong GPE!
Để dễ hình dung thì câu hỏi em cũng đã nêu trong file kèm rồi ạ.
Thầy cô và Anh Chị xem file và câu hỏi rồi xem có cách nào không giúp em với ạ.
Em xin cảm ơn!
Đây chỉ là CHUYỆN NHỎ
Nhưng để cái chuyện nhỏ ấy thật sự NHỎ thì điều đầu tiên bạn cần làm là SỬA LẠI TỜ LỊCH ---> Giá trị trong tờ lịch phải thật sự là ngày tháng đàng hoàng (chứ không phải chỉ là những con số từ 1 đến 31)
Dạ vâng thưa Thầy con cũng hiểu là dữ liệu phải theo một tiêu chuẩn ạ.
Chính vì vậy con cũng nói ngoài những con số từ 1~31 ra thì có những tháng và năm mà con đã tô màu vàng đó ạ.
Nghĩa là phải dựa vào cả những vùng màu vàng đó Thầy.
Tiêu đề tháng nhìn thì là chữ như vậy thôi nhưng Thầy chỉ vào xem ạ nó cũng là giá trị ngày tháng năm đó ạ.
Chắc là tôi phải làm từ A đến Z rồi...
Nhưng... hỏi lại: Cột WK ở đâu bạn có vậy? Ý tôi muốn nói những giá trị trong cột này được tính toán thế nào? Đó là WeekNum chăng?
Hi.Cảm ơn Anh Thảo! Em cũng đang mơ đến ý tưởng của Anh đó nhưng khả năg của Em thì chịu @@!Có một số bài nói về lịch và có luôn lịch Âm. Nếu KUMI phát triển thêm lịch âm thì sẽ có rất nhiều ứng dụng. (hẹn giờ, nhắc nhở, ...).
Hi.Cảm ơn Anh Thảo! Em cũng đang mơ đến ý tưởng của Anh đó nhưng khả năg của Em thì chịu @@!
Em xin gửi lại file lịch mới nhất có cả công thức để Thầy NDu và mọi người tìm cách giúp em nhé!
Lưu ý chổ màu đỏ xem chừng không ổn. Lấy ví dụ:Điều kiện là những ngày tháng trong Sheet NgayGhiChu phải đúng với ngày và tháng năm tại vùng màu vàng trong sheet lich
Vâng thưa Thầy có lẽ đó chính là cột Weeknum như Thầy nói đấy ạ. Đúng vậy đây không phải là file con lập mà là sưu tầm trên GPE. Con đã đưa nó vào cùng file công việc của mình từ lâu lên file là gì và đường dẫn ở đâu con cũng hổng có biết nữa.. nếu biết con cũng đã trích dẫn lên ngay từ đầu rồi mà đỡ khỏi mất công giải thích nhiều ạ.Tôi đoán chắc rằng cột WK ấy chính là Weeknum và cũng chắc rằng công thức trong file (của ai không biết) là.. trật lất
Tôi sẽ giúp bạn tính lại cột này nhưng cũng xin làm rõ vài điểm:
- Cột này có thật sự cần không? (tại làm biếng tính)
Đoạn này đúng là xem lại con thấy mình nhầm tai hại quá đúng như Thầy đã chỉ ra đó ạ. Chỉ là ngày tháng thôi còn bỏ năm đi ạ.Lưu ý chổ màu đỏ xem chừng không ổn. Lấy ví dụ:
- Hôm nay (ngày 9/11/2013) gia đình tôi có em bé. Vậy tôi ghi vào sổ: 9/11/2013 --- Mới sinh em bé (tên gì gì đó)
- Thế thì ngày này năm sau (năm 2014) trong lịch phải có chổ ghi chú "SN em bé gì gì đó" chứ, đúng không?
- Nhưng theo như yêu cầu của bạn: Đúng ngày, đúng tháng, đúng năm thì ngày này năm sau sẽ chẳng có ghi chú nào xuất hiện cả (không đúng năm) ---> bạn nghĩ sao về vấn đề này?
Tuần 35 Thầy nhỉ...Hì.Tôi đoán chắc rằng cột WK ấy chính là Weeknum và cũng chắc rằng công thức trong file (của ai không biết) là.. trật lất ---> Có thể kiểm tra bằng hàm Weeknum hoặc cũng có thể kiểm tra bằng.. mắt thường:
- Tuần 25 bắt đầu từ ngày 25/8/2013 đến ngày 31/8/2013
- Vậy thì ngày 1/9/2013 đến ngày 7/9/2013 phải thuộc tuần thứ 26, đúng không? Nhưng theo công thức trong file của bạn lại ghi đây cũng là tuần 25 ---> Hóa ra tuần 25 có 14 ngày à? Vô lý!
Tôi sẽ giúp bạn tính lại cột này
Tạm thời con mới chỉ nghĩ ra công thức tính cho cột WK thế này không biết có chuẩn cho các năm không nữa.
Thầy kiểm tra thử xem con làm vậy có ổn không ạ,con Thấy kết quả có khả quan hơn, nhưng mà công thức thì hởi điêu điêu hay sao ấy ạ. ...
Mình dùng thử thì vì Shapes("WordArt 14") đè lên ô Merge B2 nên khi thay đổi năm ở B2 thì text của Shapes (muốn dùng Shape viết chữ cho đẹp) nó ko thay đổi. Vậy thêm 1 tí xíu ...Test thử xem có gì trục trặc không nha
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
[COLOR=#ff0000]Shapes("WordArt 14").TextEffect.Text = "Calendar " & [B2][/COLOR]
modCal.Main
Target.Select
End If
End Sub
Thôi, bỏ luôn cái cột WK để bảng tính đở rườm rà
Tôi làm cho bạn phiên bản đầu tiên.
Lưu ý:
- File gồm 2 sheet: Sheet Anniversary để ghi những ngày kỷ niệm và Sheet Calendar để hiện lịch
- Tại sheet Anniversary, bạn phải ghi ngày tháng cho đúng chuẩn Date và phải đúng ngày, đúng tháng, đúng năm
- Tôi đã tính toán để Comment chỉ xuất hiện cho những sự kiện đã qua thôi. Ví dụ:* Sinh nhật ai đó nhằm ngày 12/6/1985. Vậy thì Comment chỉ xuất hiện từ 12/6/1986 trờ về sau (đương nhiên vì 1984 người đó chưa ra đời)- Thay đổi năm tại cell B2, lịch sẽ cập nhật theo
*Ví dụ tiếp ngày 2/9/1945 là ngày Quốc Khánh. Vậy thì khi xuất lịch năm 1944 sẽ không có Comment cho sự kiện Quốc Khánh (đương nhiên vì khi ấy nước ta chưa độc lập)
vân vân...
- Ngày nhỏ nhất có thể tính toán được là ngày 1/1/1901 (vì khả năng của Excel)
------------------
Test thử xem có gì trục trặc không nha
Bạn đưa chuột chọn vào WordArt sẽ thấy WordArt có công thức =B2Mình dùng thử thì vì Shapes("WordArt 14") đè lên ô Merge B2 nên khi thay đổi năm ở B2 thì text của Shapes (muốn dùng Shape viết chữ cho đẹp) nó ko thay đổi. Vậy thêm 1 tí xíu ...Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then [COLOR=#ff0000]Shapes("WordArt 14").TextEffect.Text = "Calendar " & [B2][/COLOR] modCal.Main Target.Select End If End Sub
Code này nè bạn:Thầy ơi cái đoạn code tạo comment là những đoạn nào vậy?
Hix..Con xem không hiểu gì cả..
Phiền Thầy có thể tách code riêng ra để con tìm hiểu được không ạ.
Nghĩa là trong file của Thầy đang có 2 loại code:
+1 loại code dùng để tạo lịch(không tạo ghi chú)
+1 loại code dùng để tìm ngày kỷ niệm rồi tạo ghi chú.
Con muốn tách 2 loại này ra ví dụ như 2 file khác nhau để tìm hiểu rồi vận dụng ạ.
Cảm ơn Thầy.
Sub CreateMCalendar(ByVal InYear As Long, ByVal InMonth As Long, ByVal Target As Range)
Dim aCal(1 To 6, 1 To 7)
Dim lFirst As Long, lEnd As Long, lDate As Long
Dim lR As Long, lC As Long, n As Long
Dim sDate As String
On Error Resume Next
lFirst = DateSerial(InYear, InMonth, 1)
lEnd = DateSerial(InYear, InMonth + 1, 0)
[COLOR=#0000cd]With Target.Resize(6, 7)
.ClearComments
.ClearContents
.NumberFormat = "d"
End With[/COLOR]
[COLOR=#ff0000]For lDate = lFirst To lEnd
lC = Weekday(lDate)
sDate = Format(lDate, "mm-dd")
With Target.Offset(lR, lC - 1).Resize(1, 1)
[/COLOR][COLOR=#006400].Value = lDate[/COLOR][COLOR=#ff0000]
If dic.Exists(sDate) Then
n = dic.Item(sDate)
[/COLOR][COLOR=#800080]If CLng(aMem(n, 1)) <= lDate Then .AddComment aMem(n, 2)[/COLOR][COLOR=#ff0000]
End If
End With
If lC = 7 Then lR = lR + 1
Next[/COLOR]
End Sub
Hic. Hôm qua dùng office 2003 ở máy khác (Cài phần bổ trợ của Microsoft để đọc file xlsm, xlsx...) thì nó có 1 quá trình convert nên mở file không thấy có công thức của WordArt. Nên mình nghĩ đưa vào code cho chắc ăn. Tks bạn nhéBạn đưa chuột chọn vào WordArt sẽ thấy WordArt có công thức =B2
Code này nè bạn![]()
Đây chỉ là CHUYỆN NHỎ
Nhưng để cái chuyện nhỏ ấy thật sự NHỎ thì điều đầu tiên bạn cần làm là SỬA LẠI TỜ LỊCH ---> Giá trị trong tờ lịch phải thật sự là ngày tháng đàng hoàng (chứ không phải chỉ là những con số từ 1 đến 31)
Có một số bài nói về lịch và có luôn lịch Âm. Nếu KUMI phát triển thêm lịch âm thì sẽ có rất nhiều ứng dụng. (hẹn giờ, nhắc nhở, ...).
Hix, nhưng mà file hơi ì ạch chắc là do nhiều CF "khủng" quá...@@
(chẳng lẽ lại xoá bớt CF ở những tháng không cần thiết)!
Đây là giao diện của em nó ạ (Ảnh trên phiên bản Office 2010):
Hix! Con không có ý này thưa Thầy!Nhận xét đầu tiên: Quá màu mè ---> Điều tối kỵ của Excel
Nhận xét thứ hai: File nặng như cục đá. Mở file lần thứ nhất khoảng 5 phút mà con chuột cứ quay hoài, chán quá tắt luôn (phải tắt bằng Task Manager). Mở lần thứ 2 mới vào được
Nhận xét thứ ba (quan trọng): Bạn đã làm hoàn chỉnh cả thì khó cho ai có thể chỉnh sửa giúp bạn (vì phải mất công đọc hết toàn bộ code và hiểu nó)... và nếu là tôi thì thà rằng tôi làm từ đầu còn khoẻ hơn là sửa
Kết luận: Nếu bạn ưng ý với cái version này thì chắc là bạn tự mình chỉnh sửa thôi
Nguyên nhân file nặng thì con cũng đã nói rõ là do quá nhiều công thức nặng trong định dạng CF(Nếu bỏ đi những CF của các ngày âm lịch thì cũng đỡ năng đi rất nhiều).
Mong thầy đừng hiểu lầm rằng nhìn thông tin họ tên hay sđt kia là hay nghĩ người lập đã ưng ý ạ. Đó chỉ là hình thức trang trí cho file đỡ trống trải thôi ạ.