整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

DTP控件+跟随鼠标,VBA让你的日期录入变成日期选择

家好,我们今日继续讲解VBA代码解决方案的第100讲内容:使用DTP控件输入日期。我们在录入数据的时候经常会用到日期的录入,往往会很繁琐,有没有好的办法实现日期的录入呢?今日就给大家讲解这方面的知识。和大家分享VBA的知识已经很长的时间了,到这里已经是第三本书了。待有一定的机会会出书,让大家看到一个实实在在的VBA,今日的讲解用到的控件是DTP控件,是日期时间控件Microsoft Date and Time Picker Control 6.0,的简称。

在工作表中单击菜单"开发工具"→"插入"→"控件工具箱",选择"其他控件"中的DTP控件如下图所示,就可以在工作表中添加一个DTP控件。

在设计模式下双击DTP控件写入下面的代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With Me.DTPicker21

If Target.Count = 1 And Target.Column = 2 And (Not Target.Row = 1) Or Target.MergeCells Then

.Visible = True

.Top = Selection.Top

.Left = Selection.Left

.Height = Selection.Height

.Width = Selection.Width

If Target.Cells(1, 1) <> "" Then

.Value = Target.Cells(1, 1).Value

Else

.Value = Date

End If

Else

.Visible = False

End If

End With

End Sub

Private Sub DTPicker21_CloseUp()

ActiveCell.Value = Me.DTPicker21.Value

Me.DTPicker21.Visible = False

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 And Target.Column = 2 Or Target.MergeCells Then

If Target.Cells(1, 1).Value = "" Then

DTPicker21.Visible = False

End If

End If

End Sub

代码截图:

代码解析:

第1行到第18行代码工作表的SelectionChange事件,当选择工作表的B列第2行以下的单个单元格时显示日期控件供用户选择日期。

其中第3行代码设置显示日期控件的触发条件。只有当用户选择B列第2行以下单元格且只能选择单个单元格时才显示日期控件,Or Target.MergeCells这个条件是指合并单元格。

第4行到第8行代码显示日期控件并设置日期控件的大小等于所选单元格的大小。

第9行到第13行代码,如果单元格已经输入了日期,将单元格中的日期赋给日期控件,否则将当前日期赋给日期控件。

第15行代码如果选择的是其他列则隐藏日期控件。

第19行到第22行代码日期控件的CloseUp事件,将日期控件的值赋给活动单元格后隐藏日期控件。

第23行到第29行代码工作表的Change事件,如果删除了B列单元格的日期则隐藏日期控件。

代码的运行:

选择后的工作表:

今日内容回向:

1 本例的控件是什么?

2 本例的控件是如何添加的?

3 日期代码的录入是否能清楚了?

TimeEdit简介

QTimeEdit继承自QDateTimeEdit类,因此许多的特性和功能都由QDateTimeEdit类提供,它是一个用来编辑时间的控件(即编辑时,分,秒). QTimeEdit在语法上也可以设置弹出日历,但是不起作用。

创建QTimeEdit时,如果不设置时间,则系统会为其指定一个默认的时间:0时0分0秒。

QTimeEdit类继承关系:

测试QTimeEdit

创建文件qtimeedit.py, 要测试的信息和QDateTimeEdit类似,通过测试可以知道,有关日期的操作函数可以正常起作用。完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QDate, QTime, QDateTime
from PyQt5.QtWidgets import (QApplication, QWidget, QTimeEdit, 
                             QPlainTextEdit, QPushButton, QVBoxLayout)
 
class DemoTimeEdit(QWidget):
    def __init__(self, parent=None):
        super(DemoTimeEdit, self).__init__(parent)       
        
        # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QTimeEdit Demo!')      
        # 设置窗口大小
        self.resize(400, 300)
        
        self.initUi()
        
    def initUi(self):
        
        #创建日期时间控件并设置显示格式
        self.dtEdit = QTimeEdit(self)
        self.dtEdit.setDisplayFormat('HH:mm:ss')
       
        #设置日期的最大与最小值,在当前日期上,前后大约偏移10年
        self.dtEdit.setMinimumDate(QDate.currentDate().addDays(-3652))
        self.dtEdit.setMaximumDate(QDate.currentDate().addDays(3652))
        
        self.dtEdit.setTime(QTime.currentTime())
       
        #时间改变时触发
        self.dtEdit.timeChanged.connect(self.onTimeChanged)
        
        #创建按钮,点击按钮,获取当前日期和时间
        self.btnDateTimeInfo = QPushButton('日期时间信息')
        self.btnDateTimeInfo.clicked.connect(self.onButtonDateTimeClicked)
        
        #创建信息显示区域
        self.textShower = QPlainTextEdit(self)
        self.textShower.setReadOnly(True)
        
        vLayout = QVBoxLayout(self)
        vLayout.setSpacing(10)
        vLayout.addWidget(self.dtEdit)
        vLayout.addWidget(self.btnDateTimeInfo)
        vLayout.addWidget(self.textShower)
        
        self.setLayout(vLayout)
    
    def onTimeChanged(self, time):
        self.showInfo(time.toString('hh:mm:ss'))
    
    def onButtonDateTimeClicked(self):
        #日期时间
        dateTime = self.dtEdit.dateTime()
        #最大日期
        maxDate = self.dtEdit.maximumDate()
        #最大日期时间
        maxDateTime = self.dtEdit.maximumDateTime()
        #最大时间
        maxTime = self.dtEdit.maximumTime()
        #最小日期
        minDate = self.dtEdit.minimumDate()
        #最小日期时间 
        minDateTime = self.dtEdit.minimumDateTime()
        #最小时间
        minTime = self.dtEdit.minimumTime()
        
        self.showInfo('日期和时间信息')
        self.showInfo('日期时间为: ' + dateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
        self.showInfo('最小日期为: ' + minDate.toString('yyyy:MM:dd [ddd]'))
        self.showInfo('最大日期为: ' + maxDate.toString('yyyy:MM:dd [ddd]'))
        self.showInfo('最小时间为: ' + minTime.toString('hh:mm:ss'))
        self.showInfo('最大时间为: ' + maxTime.toString('hh:mm:ss'))
        self.showInfo('最小日期时间为: ' + minDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
        self.showInfo('最大日期时间为: ' + maxDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
    
    def showInfo(self, strInfo:str):
        #print(strInfo)
        self.textShower.appendPlainText(strInfo)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoTimeEdit()
    window.show()
    sys.exit(app.exec()) 

运行结果如下图:

测试QTimeEdit

本文知识点

  • QTimeEdit继承自QDateTimeEdit,用于编辑时间。

喜欢本文内容就收藏,点赞,评论,关注和转发。

WinForms中,DateTimePicker 控件用于让用户选择日期和时间。以下是如何使用 DateTimePicker 控件的一些基本信息和示例代码:

创建和设置 DateTimePicker 控件

  1. 添加 DateTimePicker 控件:在 Visual Studio 的工具箱中找到 DateTimePicker 控件,并将其拖放到窗体上。
  2. 设置 Value 属性:您可以通过设置 DateTimePicker 的 Value 属性来指定一个默认的日期和时间。
datetimePicker1.Value = DateTime.Now;
  1. 格式化显示的日期和时间:您可以通过设置 Format 属性来控制显示的日期和时间格式。
datetimePicker1.Format = DateTimePickerFormat.Short;
  1. 启用时间选择:通过设置 ShowUpDown 属性为 true,用户可以使用上下箭头来选择时间。
datetimePicker1.ShowUpDown = true;

事件处理

  • ValueChanged 事件:当用户选择的日期和时间发生变化时,会触发此事件。
  • CloseUp 事件:当用户关闭 DateTimePicker 控件时,会触发此事件。

示例代码

以下是一个简单的示例,演示如何在窗体加载时设置 DateTimePicker 控件的一些基本属性,并处理 ValueChanged 事件:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();

        // 设置 DateTimePicker 的默认值为当前日期和时间
        datetimePicker1.Value = DateTime.Now;

        // 设置日期格式为短格式(例如,"MM/dd/yyyy")
        datetimePicker1.Format = DateTimePickerFormat.Short;

        // 启用时间选择
        datetimePicker1.ShowUpDown = true;

        // 添加 ValueChanged 事件处理程序
        datetimePicker1.ValueChanged += new EventHandler(datetimePicker1_ValueChanged);
    }

    private void datetimePicker1_ValueChanged(object sender, EventArgs e)
    {
        // 当用户选择的日期和时间发生变化时,执行此方法
        DateTime selectedDate = datetimePicker1.Value;
        // 在这里添加您的代码,例如更新 UI 或记录日志
    }
}

在这个示例中,我们首先设置了 DateTimePicker 控件的默认值、日期格式和时间选择的启用状态。然后,我们为 ValueChanged 事件添加了一个处理程序,当用户选择的日期和时间发生变化时,该处理程序会被调用。在处理程序中,您可以根据需要执行任何逻辑,例如更新 UI 或将选定的日期和时间存储到变量中。

通过这些基本步骤,您可以在 WinForms 应用程序中轻松地使用 DateTimePicker 控件来让用户选择日期和时间。