laydate 控件显示为其他颜色_VBA学习笔记61: 日期控件与进度条

本文介绍了如何在VBA中使用laydate控件设置日期选择器的颜色和格式,并探讨了两种实现进度条的方法,包括label+textbook组合和ProgressBar控件,提供了代码示例和运行演示。
摘要由CSDN通过智能技术生成

262a7883ccd6919f6566388a7cae3597.png

学习资源:《Excel VBA从入门到进阶》第61集 by兰色幻想


一、日期控件

  1. 日期选择器DTPicker
  • 添加DTPicker控件

在工具箱-附加控件,找到Microsoft Date and Time Picker Control,version 6.0,点击“确认”就能添加到工具箱里。

9afc4bd9c956507d90c82c792c39a814.png

如果没找到的话,需要安装对应系统位数的微软通用控件MSCOMCT2.OCX(具体操作可自行百度)。

aa76f050059fa382791cdcffbcf91cc2.png
点击下拉按钮,在日期列表中选择需要的日期。
  • 常用的颜色设置如下:

① CalendarBackColor 日历背景色

② CalendarForeColor 日历字体颜色

③ CalendarTitleBackColor 日历标题背景色

⑤ CalendarTitleForeColor 日历背景色

⑥ CalendarTrailingForeColor 非本月的日期字体颜色

  • 常用日期格式设置:

① 在属性窗口CustomFormat设置,用字符YMD表示年月日来填写格式,比如yyyy-MM-dd,yyyy/MM/DD等等

但注意,表示月份的M,必须使用大写,否则显示不出来。

d5354814d2706de77881acddc5da7607.png

② 或者直接在属性的自定义中设置,以上的颜色和格式,还有没有提及的图片都可以在属性页设置。其他功能自己看啦,不太常用就不说了。

e114456376975fc78cf9b44ac55211e6.png
  • 输出选取值
Private Sub CommandButton1_Click()
 Range("a1") = Me.DTPicker1.Value
End Sub

2. 日历控件

  • 添加日历控件

在工具箱-附加控件,找到日历控件,点击“确认”就能添加到工具箱里。

如果找不到就下载安装MSCAL.OCX(操作方法自行百度哈)

ac11532aef19f6f00bbd04faca95577d.png
控件版本号是看下载的MSCAL.OCX的版本,个人感觉能用就行了就没下载最新版
  • 属性调整(不多说了,和DTPicker差不多)

二、进度条

当一个VBA要运行很久才能结束,我们就有必要设置一个进度条来表示进度,以便使用者了解程序运行进展。

常用的方法有两种,第一种是label控件+textbook控件组合使用;第二种方法是使用ProgressBar控件,专业的进度条控件。

在学习前,有一个很重要的点要先说,进度要能计算出来百分比,就必要计算出总任务量,那才能分解任务。

  1. label控件+textbook控件

textbook控件作为框架,固定不动,然后通过调整label控件的宽度,来展示运行进度,可以再加一个label控件展示进度百分比。

例:假设总任务量为4000。

Private Sub UserForm_Initialize()
Label1.Width = 0'初始label值为0
End Sub

Private Sub CommandButton1_Click()
Dim x, w, k, n

w = TextBox1.Width  '最后填充的宽度和文字框一致就表明100%
n = 4000 '循环次数,总任务量

For x = 1 To n

    k = k + w / n  'k是每次运行后的宽度
    
    Label1.Width = k   '每次运行的宽度
    Label2.Caption = Format(x / n, "0.00%")  '再加一个label控件来显示进度百分比
    DoEvents ' 把程序控制权交还给系统
    
Next x

End Sub

代码讲解:

DoEvents:交出执行控制权,以便操作系统能够处理其他事件。如果不写这句的话,程序就不会显示过程,只显示最后到4000次的时候的结果(计算在后台进行),如果把系统控制权交出去,那就相当于当前进程暂停,程序重新运行。

不过这个语句是有风险的,只要将控制权临时交给事件过程中的处理器,就请确保在第一个调用返回之前,不会从代码的其他部分重新执行过程;这可能会导致出现意外结果。

59a149187624a68f382b8c627b96c58e.gif
没有写DoEvents的进度条

运行演示:

b83f81867e7ccc4d65ac7f20c2e253a8.gif
只是随意的假设一个总任务量,并没实际任务,所以就只展示了进度条的运行。

2. ProgressBar控件

附加控件Microsoft ProgressBar Control 6.0(SP6);如果找不到,需要先去下载安装MSCOMCTL.OCX。

例:假设总任务量为4000。

Private Sub CommandButton1_Click()
Dim x, w, k, n
 
n = 4000 '循环次数
ProgressBar1.Max = n  '最大值=循环次数
ProgressBar1.Min = 0  '最小值=零
ProgressBar1.Scrolling = ccScrollingSmooth  '进度条的显示方式,或在属性处设置Scrolling属性

For x = 1 To n
    ProgressBar1.Value = x '一次运行的值 
Next x

End Sub

代码讲解:

① ProgressBar1.Max:ProgressBar控件的最大值,一般是总任务量。

② ProgressBar1.Min:ProgressBar控件的最小值,一般是0。

③ ProgressBar1.Scrolling:ProgressBar控件的显示方式,有两种,ccScrollingStandard和ccScrollingSmooth。

④ 用ProgressBar控件不需要写DoEvents语句。

5c4a6d60f53c29252a529b6805854a1e.png
ccScrollingStandard显示方式像是电池格子。

d5250ce15f01c557260689053f44eacd.png
ccScrollingSmooth显示方式则是连贯的色带。

运行演示:

751a0a1692c8e369680c4698e4840c8e.gif

三、进度条实例

例:条件值可以填写,把表格A1:N5000中符合条件的值填充为红色。

代码分析:

① 计算总工作量:总共有14*5000个格子要判断,所以总工作量是14*5000=70000.

② 从上面两种方法看, ProgressBar比较方便而且专业,所以我们使用ProgressBar控件。

代码:

Private Sub CommandButton1_Click()

Dim rg As Range, k As Long

Cells.Interior.ColorIndex = xlNone '清空单元格格式
ProgressBar1.Max = 70000 '设置进度条的最大值为5000行*14列
ProgressBar1.Min = 0
ProgressBar1.Scrolling = 1

For Each rg In Range("a1:n5000")
    
    k = k + 1
    
    '判断是否符合条件
    If rg.Value < Val(TextBox1.Value) And rg.Value <> "" Then
        rg.Interior.ColorIndex = 3
    End If
   
   ProgressBar1.Value = k
 
Next rg
 
MsgBox "设置完成"

End Sub

运行演示:

580cee06ecea8e4006e94d0894c04a7d.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值