请问在VBA,制作窗体,在程序运行时窗体显示“正在运行……”,程序运行完后,窗体自动隐藏。
#其它程序#
uerform1.hide
但当程序运行时,必须要关闭了窗体“#其它程序#”才会继续运行,请问怎么解决呢?万分感谢啊! 展开
这是很简单的事情,有人居然说不能实现?你新建一个窗体,加一个LABEL1,然后在程序开始时调用窗体:UserForm1.Show 0:DoEvents,弹出提示,在程序结束时卸载窗体:Unload UserForm1,就搞定了。通过UserForm1.Label1.Caption = "****字符串***"语句还可以在过程中根据环境设置不同的提示。上传了一个附件,大家放心使用,为本人编写,不存在版权问题。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
Dim i&
UserForm1.Show 0
DoEvents '没有DoEvents,窗体会空白
UserForm1.Label1.Caption = "正在载入数据,请稍等……"
DoEvents
For i = 1 To 100 '可以把循环替代成具体事务
Sleep 100: DoEvents
Next
UserForm1.Label1.Caption = "正在进行计算,请稍等……"
DoEvents
For i = 1 To 100
Sleep 100: DoEvents
Next
Unload UserForm1
End Sub
比如假设你用一个死循环一直运行
如果你中间 选择开始另一个函数执行,这个死循环就会被终止掉,然后执行你选择的功能
除非你用其他触发条件或方法重新启动那个死循环,否则那个死循环就不会自己启动的
那请问大神,在VBA中有没有可以实现:在程序运行时弹出“正在运行,请稍候……”提示的方法呢?不胜感激啊!
不要用弹出窗口的方式,这样会让程序停止
你可以在excel某个表格的格子里面显示
比如
A1 显示"正在运行,请稍候……"
range("a1").value = "正在运行,请稍候……"
我也是这个问题才来搜索的,总结前面几人的回答,在二楼(答题用户:QQ471515510)找到了答案。但二楼并没有说明问题的真正所在,我几次百度有如下总结:
1、决定userform1.show后面的程序是否继续运行的关键在于show的运行模式 ,show的后面是有参数的userform1.show [模式]
(1)模式为1时表示模式窗体,即userform1.show 1。用户必须对窗体做出处理后程序才 会继续运行。
(2)模式为0时表示无模式窗体,即userform1.show 0。窗体弹出后余下的程序会继续运 行。
(3) 如果模式参数省略,则默认是模式窗体。
参考资料1:网页链接
2、二楼所使用的等待函数“sleep”不是vba中的函数,所以他加了
“Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)” 此函数在32位操作系统下能用但在64位操作系统下报错,在64位操作系统下能用但在32 位操作系统下报错。vba习惯用timer,但timer也有缺陷,详细请看参考资料2
参考资料2:网页链接
3、在“userform1.show 0”和“unload userform1”语句之需要加上等待时间语句,否 则窗体的打开和关闭就是一瞬间的事,你根本意识不到窗体曾经打开过,还以为是程序写错了。
上面1、2条所有内容都来自于参考资料1和参考资料2,并非原创,3作为温馨提示。(那我为什么要写呢?因为如果老是搜索,大家都不写点什么下次上哪里去搜索。)