|
楼主 |
发表于 2009-4-9 07:51
|
显示全部楼层
第8部分 控件与用户窗体
技巧116 使用DTP控件输入日期
在工作表中输入日期可以使用日期时间控件(Microsoft Date and Time Picker Control 6.0,简称DTP控件)。
在工作表中单击菜单“视图”→“工具栏”→“控件工具箱”,选择“其他控件”中的DTP控件如图所示,在工作表中添加一个DTP控件。
在设计模式下双击DTP控件写入下面的代码:- #001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
- #002 With Me.DTPicker1
- #003 If Target.Count = 1 And Target.Column = 2 And (Not Target.Row = 1) Or Target.MergeCells Then
- #004 .Visible = True
- #005 .Top = Selection.Top
- #006 .Left = Selection.Left
- #007 .Height = Selection.Height
- #008 .Width = Selection.Width
- #009 If Target.Cells(1, 1) <> "" Then
- #010 .Value = Target.Cells(1, 1).Value
- #011 Else
- #012 .Value = Date
- #013 End If
- #014 Else
- #015 .Visible = False
- #016 End If
- #017 End With
- #018 End Sub
- #019 Private Sub DTPicker1_CloseUp()
- #020 ActiveCell.Value = Me.DTPicker1.Value
- #021 Me.DTPicker1.Visible = False
- #022 End Sub
- #023 Private Sub Worksheet_Change(ByVal Target As Range)
- #024 If Target.Count = 1 And Target.Column = 2 Or Target.MergeCells Then
- #025 If Target.Cells(1, 1).Value = "" Then
- #026 DTPicker1.Visible = False
- #027 End If
- #028 End If
- #029 End Sub
复制代码 代码解析:
第1行到第18行代码工作表的SelectionChange事件,当选择工作表的B列第2行以下的单个单元格时显示日期控件供用户选择日期。
其中第3行代码设置显示日期控件的触发条件。只有当用户选择B列第2行以下单元格且只能选择单个单元格时才显示日期控件,因为本例B列中存在合并单元格,所以需要加上Or Target.MergeCells这个条件,否则单击合并单元格不显示日期控件。
第4行到第8行代码显示日期控件并设置日期控件的大小等于所选单元格的大小。
第9行到第13行代码,如果单元格已经输入了日期,将单元格中的日期赋给日期控件,否则将当前日期赋给日期控件。因为本例B列中存在合并单元格,而合并区域的值在该区域左上角的单元格中指定,所以用Target.Cells(1, 1) 指定合并单元格的值,否则代码会出错。
第15行代码如果选择的是其他列则隐藏日期控件。
第19行到第22行代码日期控件的CloseUp事件,将日期控件的值赋给活动单元格后隐藏日期控件。
第23行到第29行代码工作表的Change事件,如果删除了B列单元格的日期则隐藏日期控件。
当用户选择B列单元格时效果如图所示。
|
|