Excel VBA之函数篇-3.7自动录入节奏太快,加上延时等待更人性化
Excel VBA之函数篇-3.7自动录入节奏太快,加上延时等待更人性化
前景提要
昨天我们成功得实现了在数据录入的过程中,自动登记日期/时间和手工录入日期/时间得方法,在当初完成这个小脚本的时候,也是尝试了一下效果,还是非常得不错得,至少能够满足集中录入和随时录入这两种情况了,相信能够在日后的工作中给有这方面得需要得童鞋提供一些帮助得,然后今天小编一同事告诉我,这样操作有一个很明显得bug,让他使用的非常得不舒服。
抱着不断完善小脚本得心态,我又仔细了解了下它得问题,原来她也是集中录入得,并且是自动录入日期,手工录入时间得,对于每天需要集中录入很多交易数据得她来说,这功能是不错,但是小编这同事也是非常仔细得同事,他希望每次录入完成之后,能够在和收据上得数据核对下,但是这个时候我们程序中得不足就体现出来了,录入完成之后,自动进入循环,弹窗让我们录入一下条数据,数据少的时候还没有影响, 数据量的时候还会遮挡我们录入得数据,想要核查录入的数据是否正确, 还要手动去移开弹窗,有点不方便。
小编仔细想想好像这样也是一个问题,可能有时候我们要核对数据录入得准确性,毕竟有些地方我们不得不进行手工录入,手工就会存在出错得情况,所以我们应该在数据录入之后,留下一个等待时候,让用户检查核对数据,然后在提示输入,那今天我们继续完善下我们得代码。
函数说明
延时等待,这种方法在很多得代码中都是比较常用得,比方说在使用python访问网页的时候,一般都会带有延时操作,以免被封号,在学习VBA得时候,小编也简单得接触过延时操作,但是小编觉得excel再利用VBA处理数得过程中,一般都用不到延时,因为他都是自动等excel执行完上一个命令在执行下一个命令得,根本不需要等待。但是在今天这样得场景中,等待延时有变的非常有必要了,那我们就来学习下延时得方法,很简单wait()轻松搞定。
上代码
我们还是利用昨天得表格,不做任何变动,加上延时,可惜好像不好上传动画,延时得效果似乎展示得不太好。案例中设置得等待时间是10s
Sub test()
Dim num&, ShopName$
line:
num = Application.InputBox("请输入商品的序号", "输入准确的序号", , , , , , 3)
If num <> 0 Then
ShopName = Choose(num, "苹果手机", "vivo", "华为", "OPPO X27", "摩托罗拉", "红米 小辣椒XR", "百度音响5-5")
LastCol = Cells(Rows.Count, 6).End(xlUp).Row
Cells(LastCol + 1, 6) = ShopName
Cells(LastCol + 1, 9) = Date
'NewDate = Application.InputBox("请输入实际销售日期,用点隔开", "日期的输入", , , , , , 3)
'YEAR1 = Split(NewDate, ".")(0)
'MONTH1 = Split(NewDate, ".")(1)
'DAY1 = Split(NewDate, ".")(2)
'Cells(LastCol + 1, 9) = DateSerial(YEAR1, MONTH1, DAY1)
NewDate = Application.InputBox("请输入实际销售时间,用点隔开", "日期的输入", , , , , , 3)
'Cells(LastCol + 1, 9).Offset(0, 1) = Time
hour1 = Split(NewDate, ".")(0)
min1 = Split(NewDate, ".")(1)
senc1 = Split(NewDate, ".")(2)
Cells(LastCol + 1, 9).Offset(0, 1) = TimeSerial(hour1, min1, senc1)
Application.Wait Now() + VBA.TimeValue("00:00:10")
GoTo line
End If
End Sub
因为上传不了动图,可能上传图片得话,效果并不是太好,我们截取两个静态图来验证下效果吧,具体得效果大家可以自己下去操作下代码感受下,
效果如图:
这个是完成了一次录入时候,并没有立刻弹窗提示输入吓一跳数据,在这个过程中,页面是很干净得,所有的数据都能够展示并且看到,这样在这个时间段内,我们就能够轻松得核对数据了。
![](http://n4.ikafan.com/assetsj/blank.gif)
前面我们也说了,设置得等待时间是10s,所以10S一到,弹窗又会继续展示,让我们继续录入下一条数据。
![](http://n4.ikafan.com/assetsj/blank.gif)
代码解析
今天我们重点说下wait()函数得用法,看上面得代码,写起来也非常得简单,学起来自然也不是很难,wait(h:m:s)括号中得数据就是完整得时分秒,这里wait()又可以延伸出来两种不同得用法,我们来分别说下
一种就是从现在开始等多久执行下一步,举个例子
Application.Wait Now() + VBA.TimeValue("00:00:10")
'Application.Wait Now() + VBA.TimeValue("00:10:00")'等待10分钟
'Application.Wait Now() + VBA.TimeValue("10:00:00")'等待10小时
案例中得写法就是这样得,从我执行完最后一步,也就是时间得录入之后,等待10s在执行下一步,就是弹窗提示输入下一个序号,同事我给告诉大家如果要等到10分钟,10小时得写法,大家可以更具自己得需要,灵活使用。
另外一种就是直到什么时间,采取执行下一步
Application.Wait VBA.TimeValue("23:30:05")
此写法得作用就是执行了时间录入之后,我就暂停程序了,然后脚本会自动监控当前得时间,直到当前时间是23:30:05得时候,才会接着执行下一步命令,在此之前程序都是处于暂停状态,我们可以做任何其他得操作。
总结
==========================================================================
今天通过小编得同事,我们进一步得完善了我们之前得代码,本次主要学习得是延时等待得时间函数wait(),可以延伸出来两种不同得使用方法,一种是等待多少时间之后继续下一步,一种就是直到某个时间才会执行下一步操作,两种方法在日常得工作中可能都会使用到,我们可以结合场景灵活得使用。
其实延迟等待在弹窗提示得方法,并不算是最好得方法,小编认为最好得方法应该是增加一个控件,指向对应得VBA脚本,这个我们在后面学习窗体得时候,在具体和大家讲述。并且有些商店得电脑也不太适合不停得移动鼠标不是嘛?
============================================