Tặng tiện ích CALENDAR phiên bản cuối cùng (Excel 2007 trở về sau).

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,615
Được thích
16,675
Giới tính
Nam
Qua nhiều lần cải tiến và tôi nghĩ tới đây là nên chấm dứt chuyện Lịch này. Cho nên tôi đã lường hầu hết các trường hợp có thể xảy ra trên các đối tượng, các Range, các UserForm để đối tượng đó nhận ngày tháng sao cho Calendar show ra tại vị trí nơi nhận ngày tháng (có sự trợ giúp to lớn trong việc xác định vị trí của bạn doveandrose, xin cảm ơn bạn).

Nếu các bạn có xài Excel 2007 trở về sau thì nên tải về, giờ đây tôi cũng sẽ lưu file từ 2007 trở về sau mà không phải convert sang 2003 nữa.

Với phiên bản lần này, các bạn được tham khảo lập trình, cách thức add controls và cách tạo sự kiện cho các ActiveX Controls trên Sheet như TextBox, Frame, MultiPage (nguồn trong File Hướng Dẫn).

PHP:
Option Explicit
Private WithEvents frmTextBox1 As MSForms.TextBox
Private WithEvents frmTextBox2 As MSForms.TextBox
Private WithEvents frmTextBox3 As MSForms.TextBox
Private WithEvents mtpTextBox1 As MSForms.TextBox
Private WithEvents mtpTextBox2 As MSForms.TextBox
Private WithEvents mtpTextBox3 As MSForms.TextBox
''******************************************************************************************************
''SHEET EVENT:
''******************************************************************************************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Target.Row > 10 And Target.Row < 21 Then
        Run "CALENDAR.xlam!CalendarExit"
        Run "CALENDAR.xlam!Calendar", Target
    End If
End Sub


Private Sub Worksheet_Deactivate()
    EraseFrameControlEvent
End Sub
''******************************************************************************************************
''CONTROL BELONG TO SHEET EVENT:
''******************************************************************************************************
Private Sub CommandButton1_Click()
    Frame.Show
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", TextBox1
End Sub

Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    CreateFrameControlEvent
End Sub

Private Sub MultiPage1_MouseMove(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    CreateFrameControlEvent
End Sub
''******************************************************************************************************
''CREATE EVENT FOR SOME TEXTBOXES INTO FRAME ON SHEET EVENT:
''******************************************************************************************************
Sub CreateFrameControlEvent()
    If frmTextBox1 Is Nothing Then
        Set frmTextBox1 = Sheet2.Frame1.Controls("TextBox1")
        Set frmTextBox2 = Sheet2.Frame1.Controls("TextBox2")
        Set frmTextBox3 = Sheet2.Frame1.Controls("TextBox3")
        Set mtpTextBox1 = Sheet2.MultiPage1.Pages(1).Controls("TextBox1")
        Set mtpTextBox2 = Sheet2.MultiPage1.Pages(0).Controls("TextBox2")
        Set mtpTextBox3 = Sheet2.MultiPage1.Pages(1).Controls("TextBox3")
    End If
End Sub

Sub EraseFrameControlEvent()
    Set frmTextBox1 = Nothing
    Set frmTextBox2 = Nothing
    Set frmTextBox3 = Nothing
    Set mtpTextBox1 = Nothing
    Set mtpTextBox2 = Nothing
    Set mtpTextBox3 = Nothing
End Sub
''******************************************************************************************************
''CONTROL BELONG TO FRAME ON SHEET EVENT:
''******************************************************************************************************
Private Sub frmTextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", frmTextBox1
End Sub

Private Sub frmTextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", frmTextBox2
End Sub

Private Sub frmTextBox3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", frmTextBox3
End Sub
''******************************************************************************************************
''CONTROL BELONG TO MULTIPAGE ON SHEET EVENT:
''******************************************************************************************************
Private Sub mtpTextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", mtpTextBox1
End Sub

Private Sub mtpTextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", mtpTextBox2
End Sub

Private Sub mtpTextBox3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Run "CALENDAR.xlam!Calendar", mtpTextBox3
End Sub
''******************************************************************************************************

Một cải tiến nữa là trên Tab Home của dải Ribbon, tôi có thêm 1 Icon mặt cười (Happy Face) để tiện cho việc show lịch.

ThucHanh.jpg

Với người lập trình khi sử dụng Calendar này lại thuận tiện hơn với cấu trúc giản tiện:

Run "CALENDAR.xlam!Calendar", Range("C5")

Run "CALENDAR.xlam!Calendar", TextBox1


Quá đơn giản để nhúng lịch vào chương trình của mình phải không!
 

File đính kèm

  • CALENDAR.xlam
    122.1 KB · Đọc: 298
  • HuongDan.xlsm
    50.3 KB · Đọc: 298
Lần chỉnh sửa cuối:
hay quá anh ơi . Nhưng liệu đây có phải là lần chỉnh sửa cuối cùng chăng ? hi hi hi
 
Upvote 0
hay quá anh ơi . Nhưng liệu đây có phải là lần chỉnh sửa cuối cùng chăng ? hi hi hi
Có thể chỉnh sửa lỗi phát sinh, nhưng không nâng cấp thêm tiện ích nào khác nữa. Phải khép cái vụ này lại mới có đầu tư vào tặng những sản phẩm mới chứ! Hãy tin rồi sẽ có, Hãy cho rồi sẽ nhận mà!
 
Upvote 0
Cảm ơn anh rất nhiều, bổ ngửa (ích) hơn nữa là được học code của anh :) hehe--=0
 
Upvote 0
Vọc thử mà được ta? Ngộ vậy ta!}}}}}
 

File đính kèm

  • AmDuongLich.jpg
    AmDuongLich.jpg
    96.9 KB · Đọc: 371
Upvote 0

File đính kèm

  • DepTrai.jpg
    DepTrai.jpg
    50.4 KB · Đọc: 355
Upvote 0
Uh, ý này hay nè! Mình phải làm cái riêng cho mình chứ! Kakakaka
Chà, được đấy! cái này đáng để học đây !Liệu bạn có tải phiên bản mới lên để mọi người học hỏi không nhỉ ? Chèn hình vào Menu, tất nhiên làm một cái để cho oai thôi chứ chỗ nào cũng có hình, cũng không hay lắm!
 
Lần chỉnh sửa cuối:
Upvote 0
Khiếp kỳ này nghĩa nghiên cứu cả CanChiV nữa mới sợ chứ định làm thầy Bói hay sao ta.......//**/
Hay Ghê Cảm ơn Bạn Nghĩa nhiều nhiều
 
Upvote 0
Chà, được đấy! cái này đáng để học đây !Liệu bạn có tải phiên bản mới lên để mọi người học hỏi không nhỉ ? Chèn hình vào Menu, tất nhiên làm một cái để cho oai thôi chứ chỗ nào cũng có hình, cũng không hay lắm!

Phải thế này mới đeeeeeeẽ nè!
 

File đính kèm

  • QuaDepTrai.jpg
    QuaDepTrai.jpg
    35.3 KB · Đọc: 242
Upvote 0
Nhìn lại đi anh, không chỉ là cái mẹt độp chai của mềnh, mà là một nghệ thuật trên Menu đóa!
Mấy lần sinh nhật GPE mình có theo dõi các bạn và các thày nên nhận mặt được khá nhiều người . Tiếc rằng ngày trước mình công tác trong suôt nhưng chưa biết GPE , giờ thì không có điêu kiện rồi...
 
Upvote 0
Khiếp kỳ này nghĩa nghiên cứu cả CanChiV nữa mới sợ chứ định làm thầy Bói hay sao ta.......//**/
Hay Ghê Cảm ơn Bạn Nghĩa nhiều nhiều
Nghĩ cũng lạ, người xưa ở VN nói riêng và châu Á nói chung, tính lịch theo Thiên Can, Địa Chi rồi để xác định hơn lại gán vô tên ông vua nào đó, chẳng hạn: Năm Bính Thìn - Trần Thái Tông.

Thế nhưng cái năm Bính Thìn đó nó có chu kỳ là 60 năm sẽ quay lại, mà giả sử ông vua đó sống trên 70 tuổi thì sao ta? Làm sao phân biệt được là năm nào?

Nghĩ đi nghĩ lại, lịch của Tây Âu là tốt nhất, không bao giờ trùng năm, vậy mới nói họ mới thật sự tiến bộ và văn minh.
 
Upvote 0
Em thấy giống giống ai ấy nhỉ. Xem nào, thêm cặp kính nữa thì giống anh Nghĩa Nguyễn Đức phải biết :-=

attachment.php

Sao nhìn hình này lại giống Nghĩa Nguyễn Đức? Mà người này là ai vậy bạn?
 
Upvote 0
Nghĩ cũng lạ, người xưa ở VN nói riêng và châu Á nói chung, tính lịch theo Thiên Can, Địa Chi rồi để xác định hơn lại gán vô tên ông vua nào đó, chẳng hạn: Năm Bính Thìn - Trần Thái Tông.

Thế nhưng cái năm Bính Thìn đó nó có chu kỳ là 60 năm sẽ quay lại, mà giả sử ông vua đó sống trên 70 tuổi thì sao ta? Làm sao phân biệt được là năm nào?

Nghĩ đi nghĩ lại, lịch của Tây Âu là tốt nhất, không bao giờ trùng năm, vậy mới nói họ mới thật sự tiến bộ và văn minh.
Mình có một thời gian nghiên cứu cả kinh dich, thiên can địa chi,Tiên thiên bát quái và hậu thiên bát quái nữa mới sợ chứ.........

Nghiên cứu một thời gian có những lúc mình cứ nói lảm nhãm ... giáp , ất , bính, đinh, mậu,kỷ, canh, thân,....

Có người nói kỳ này Ông Mạnh sao ý.....nghĩ lại thấy mình có dấu hiệu thần kinh .... bỏ luôn...,,,,,,,,,,,,,,
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom