- Tham gia
- 17/8/08
- Bài viết
- 8,662
- Được thích
- 16,718
- 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).
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.
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!
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.
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
Lần chỉnh sửa cuối: