一、你要有一个Excel工作簿,里面有你想要执行的宏,而且要保存为启用宏的工作簿格式,文件名后缀xlsm。
![3627d2882fbfadbe493697fa4cd704af.png](https://i-blog.csdnimg.cn/blog_migrate/0d54142957f2b3df312b96c67550df99.png)
这个的目的是自动从数据库中刷新数据到工作簿里,同时保存退出。
二、做一个VBS自动处理文本文件,它要指明工作簿的完整路径,哪个宏(即“刷新”),这是在Module1中的,在表单中的宏要适当修改。用了变量这样更加简明可读。内容如下:
Set objExcel = CreateObject("Excel.Application")
Dim filePath
' Determine script location for VBScript
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim sScriptDir : sScriptDir = oFSO.GetParentFolderName(WScript.ScriptFullName)
'Wscript.Echo "Current script directory is " & sScriptDir
'filePath="lESDd.mpublic集团约管动导出的各类Excel数据源04 定期导出成本优化台账数据定期从ES系统中导出成本优化台账数据 每天晚上三点.xlsm"
Set objWorkbook = objExcel.Workbooks.Open(sScriptDir &"定期从ES系统中导出成本优化台账数据 每天晚上三点.xlsm")
objExcel.Visible = True
objExcel.Run "刷新"
objWorkbook.Close
objExcel.Quit
Set objWorkbook = Nothing
Set objExcel = Nothing
WScript.Quit
三、要将VBS文件包在bat文件中
如果不包起来,在服务器上直接用Windows的任务计划是无法启动vbs的,具体原因不明。
但在本人笔记本电脑上,可以直接启动vbs,似乎跟你安装的vb环境有关。
cscript.exe "l利不打开Excel运行刷新动态盈利工作簿.vbs"
四、将上面的bat纳入到任务计划中
![b96c28f0d32badf7bb000341167f18ff.png](https://i-blog.csdnimg.cn/blog_migrate/1538a5f5d2b605aa4d50e2355f38f3a6.jpeg)
![97f233f14efec73033b3dd9b67099f6b.png](https://i-blog.csdnimg.cn/blog_migrate/6eb40a139f1213afc2a2599dcbe27f42.jpeg)
![90f9a830b9909a3838f5232b3f731deb.png](https://i-blog.csdnimg.cn/blog_migrate/5f7e03f7417d91d934739f40b3e09231.png)
![ccdf0bf3e1b1508ded36b9b49a66d52c.png](https://i-blog.csdnimg.cn/blog_migrate/73208efb95db3aee24734ec3f440bca3.jpeg)
![06a9a1798346a9ddaaefabdf47186e43.png](https://i-blog.csdnimg.cn/blog_migrate/7429e0590e68aab4e4f44d4bad724d47.jpeg)
![812e04bc649bf37132d2fc80c5d9756c.png](https://i-blog.csdnimg.cn/blog_migrate/a95931d5c3fdd18030972d689da374e7.jpeg)
当第一次打开文件,或你修改了原来的文件名,会弹出如下窗口,你启用或确定后,同一位置文件名,下次不会弹出。
![81e85ca8470225a0a74f69e09ccad16f.png](https://i-blog.csdnimg.cn/blog_migrate/74eb76580c35c3cdf93f07264b0d5362.jpeg)
一个按钮启用多个宏的办法,参考链接是https://www.extendoffice.com/documents/excel/4631-excel-button-to-run-multiple-macros.html
![b04cec54c6a1a2080e4c5208985eb720.png](https://i-blog.csdnimg.cn/blog_migrate/c51d209296726c6202e61ec4412df110.jpeg)
重点1:当有多个vbs时,分别写vbs,将全部纳入bat中是可以的。如下
cscript.exe "ld.下A!.vbs"
cscript.exe "lB簿.vbs"
重点2:想将多个语句写到一个vbs中,再用一个bat指向这个vbs,这样比前面一个要简单些,但实际上是无法运行的。暂时作罢。
任务计划无法改名的办法,见如下链接。也非常方便的。
https://www.digitalcitizen.life/how-rename-windows-task-created-task-scheduler
怎样取得文件的完整路径名,最简单的办法是生成快捷方式,在属性中打开并复制就行。注意复制后的文件地址有的有双括号,有的没有。
![8e6746e6dc1e436abef838182c07a708.png](https://i-blog.csdnimg.cn/blog_migrate/0c230cd97fd0195291c569eafb1ab63b.png)
1.在服务器上,能够双击vbs文件,会弹出安全性窗口,再弹出Excel文件窗口,运行后,关闭。
2.将此vbs配到服务器的任务计划中,会弹出,你要用什么程序打开vbs的提示,在本机中没有弹出。所以上面有用bat的办法,但这样多了一道手续,能否省掉呢,答案是可以的。
后来解决了这个问题,可以将vbs直接配置到任务计划中,来自如下链接,由于被墙,用手机看图片才看出来的办法
it opens "open with" prompt whenever scheduled task runsuperuser.com![e7baeaa4a665f97ac9244afa606f505e.png](https://i-blog.csdnimg.cn/blog_migrate/d8db4cb96cdbc803aa3c442d89bf4609.png)
![aa05607a0b30fb066a55733996d60eab.png](https://i-blog.csdnimg.cn/blog_migrate/815e95a479e9a822b2b7a2c81cbdc6e7.jpeg)
注意:上面的文件有"",下面的参数,是指VBS的完整路径,不是XLSM的,由于文件夹名称中有空格,也要用""包起来,这样成功运行了。
' Determine script location for VBScriptDim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")Dim sScriptDir : sScriptDir = oFSO.GetParentFolderName(WScript.ScriptFullName)
Wscript.Echo "Current script directory is " & sScriptDir
2020.05.12晚:
双击VBS,都能够正常触发打开工作簿,启动宏,将数据刷新过来。
在家里的兼容机上,将任务计划的常规中的“只在用户登录时运行”勾选,就正常了,刷新取得数据。但我的笔记本电脑就是不行,很快打开,又很快关闭,就是不能将数据刷过来。
兼容时的用户是Admin,但笔记本是Administrator,不知道这是原因吗?
两边的文件和程序都是一样的,奇怪了。
可能的差异,兼容机:是用的我谷歌邮箱注册的outlook,是没有联上office 365账户的。都是管理员,这有区别吗?