在Excel中如何用vba实现:每隔一段时间自动将工作簿保存到以当时时间为文件名的文件中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Excel中如何用vba实现:每隔一段时间自动将工作簿保存到以当时时间为文件名的文件中相关的知识,希望对你有一定的参考价值。

以下代码运行后,会在当前目录下创建一个 Backup 的文件夹,然后每五分钟以当前日期时间为文件名备份工作簿到这个目录中,运行下面的 Timerstop 可停止定时。

Dim Flag As Boolean
Sub Backup()
Dim Path As String, OldPath As String
On Error Resume Next
If Flag Then Flag = False: Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Dir(ThisWorkbook.Path & "\Backup\", vbDirectory) = "" Then MkDir ThisWorkbook.Path & "\Backup\"
Path = ThisWorkbook.Path & "\Backup\"
ThisWorkbook.SaveCopyAs Path & Replace(Now, ":", ":") & ".xls"
Application.OnTime Now() + TimeValue("00:05:00"), "Backup" '五分钟运行一次Backup函数

VBA.DoEvents
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Sub Timerstop()
Flag = True
End Sub追问

水平实在是高啊!!!能否再辛苦一下从第5行开始帮忙增加注释

追答

If Dir(ThisWorkbook.Path & "\Backup\", vbDirectory) = "" Then MkDir ThisWorkbook.Path & "\Backup\" '如果找不到当前工作簿目录下的Backup 文件夹,则在当前工作簿目录创建一个

Path = ThisWorkbook.Path & "\Backup\" 这个不解释。其实你直接在下面写上也可以了,不一定要经过这个Path变量赋值

ThisWorkbook.SaveCopyAs Path & Replace(Now, ":", ":") & ".xls" 本工作簿另存为(这里的另存为只是在后面的目录下复制一个,并不会改变本工作簿) 后面是路径+文件名+后缀。因为电脑不能以英文冒号作为文件名,所以我把英文冒号替换为中文冒号,当然文件名你可以自己定义,路径也可以自己改。

Application.OnTime Now() + TimeValue("00:05:00"), "Backup" 从现在开始,五分钟后,运行一个名为 Backup的过程,也就是本过程,所以下次运行本过程后又重新计算五分钟,就实现了定时。 当然时间和过程你们可以自己改。

下面的那个过程是停止计时的,运行那个过程后设置Flag标记为True (注意定义Flag为公有变量,否则不能两个过程共用)。因为上面的Backup过程有这句话If Flag Then Flag = False: Exit Sub 如果Flag为True 则设置Flag会False 然后直接退出,所以不会再运行下面这句
Application.OnTime Now() + TimeValue("00:05:00"), "Backup" 定时的代码了,所以就可以停止了。

追问

太棒了,真想象不到你的做什么工作的。我曾经就因为冒号的问题困扰了好长时间。不过上面两行我也不明白起什么作用,不知能否再劳驾

追答

Application.ScreenUpdating = False
Application.DisplayAlerts = False
这两句?
第一句是关闭屏幕更新的,就是你操作的时候屏幕不会马上更新显示,基本上所有代码前面都要加上最好。下面一句是 关闭提示的,比如提示你是否保存啦,有重名是否覆盖啦,等等这些提示的。
记得在代码最后把它们打开回来。

参考技术A 设置一个计时器,然后指定时间,另存到你的指定的文件夹中去
你用手机上也看不到这么长的回答,只给你思路本回答被提问者采纳

c#中如何保证每隔一段时间执行一个动作。

即实现刷新功能。

参考技术A 使用Timer控件,在它的Tick事件里编写你希望执行的动作,并通过设置interval设置执行此动作的时间间隔,interval时间是以毫秒为单位的,即如果你把interval值设为1000则此动作每间隔1秒钟执行一次。 参考技术B 用Thread.Sleep(间隔时间);将当前线程临时中止或休眠一段时间,即延迟一段时间在运行。 参考技术C 用timer控件,或者自己写委托 参考技术D 可以通过使用定时器来完成:
添加一个timer1,为timer1的Tick事件写程序,具体实现方法,给个例子:
int n = 0;//用于计数,此程序改变的也是这个值
private void timer1_Tick(object sender, EventArgs e)//每1000毫秒执行一次

n++;
MessageBox.Show("你好,这是第"+n+"次打招呼哦");//弹出对话框告诉你
if (n >= 4)//不能无限的循环下去,当弹出3个对话框了,就停

timer1.Enabled = false;//此属性为false,timer1_Tick事件就不会执行了




private void Form1_Load(object sender, EventArgs e)

timer1.Enabled = true; //设置为truetimer1_Tick实践就会执行,开始计时
timer1.Interval = 1000; //设置timer1的timer1_Tick实践执行周期为1000毫秒

运行周期、运行次数和执行动作都是任意更改的^^~本回答被提问者和网友采纳

以上是关于在Excel中如何用vba实现:每隔一段时间自动将工作簿保存到以当时时间为文件名的文件中的主要内容,如果未能解决你的问题,请参考以下文章

在excel中如何用vba来实现查找特定的字符串?

Excel中如何用VBA判断行数?

请问,在Excel中如何用VBA提取数据后保留原格式不变?

VBA研究VBA中如何用求和函数SUM求和

excel中如何用VBA一次读入一整行的数据到字符串中? 谢谢!

c#中如何保证每隔一段时间执行一个动作。