|
本帖最后由 gxp1986 于 2019-9-6 10:44 编辑
"当你日复一日的做着相同的操作时,应该考虑效率的问题了!"
-------我也不知道是谁说的
首先说明一下,这里说的操纵,其实意思是自动化执行一些指定动作.
要操纵程序,首先要使用VBA代码打开指定的外部程序:- Dim labelshop
- labelshop = Shell("Explorer.exe 程序的地址", vbNormalFocus)
复制代码
附:
vbNormalFocus正常模式,vbMaximizedFocus最大化模式,vbMinimizedFocus最小化
有些程序从打开到加载完成,需要一些时间,所以我们要让VBA程序等待外部程序启动完成后再执行,不然代码就会得不到有效的执行.
所以我们需要用到:
- Application.Wait (Now + TimeValue("0:00:03"))
复制代码
TimeValue里面的时间,单位为秒,请测试你需要启动的程序,所需要的启动时间,再合理调整
最后是操作部分了.其实说白了,就相当于无鼠标,全键盘操作! 操作前,你可以查看一下外部程序的各种快捷方式,对你编写代码有很大帮助!
所以我们需要用到:
- Application.SendKeys "按键名" 或者 变量
复制代码
如果你需要输入一段字符,可以这样:
- Application.SendKeys "我是一串字符,或者一篇文章.如果字符串过长,可以作用变量"
复制代码 如果你需要打印,可以这样
- Application.SendKeys "^P" '调出打印窗口
- Application.SendKeys "5" '设置打印的份数
- Application.SendKeys "~" '回车开始打印
复制代码
其它参数明细,请查看最后面的附表.
值得一提的是:外部程序在执行过程中,也有可能需要等待时间!!!所以我们又要按需使用,以保证代码的正常运行
- Application.Wait (Now + TimeValue("0:00:03"))
复制代码
操作完成后,强迫症的我,懒到不想去点程序右上角的"X" ...,所以我用VBA来关闭掉这个外部程序...
下面的代码,以关闭 LabelShop.exe 程序为例.
如果你不知道程序的进程名字,可以调出"任务管理器"----"应用程序",右键你的程序,选择最后一行 "转到进程",抄下来就可以了
- Sub 关闭()
- Set msoft = GetObject("winmgmts:").execquery("select * from win32_process where name like '%.exe'")
- For Each S In msoft '用s.name可以列出所有运行的exe文件
- If S.Name = "LabelShop.exe" Then
- S.Terminate
- End If
- Next
- End Sub
复制代码
最后的最后,说一个我遇到的坑!这个坑与输入法有关.因为全程都是用VBA代码执行的.当你sendkeys时,因为相当于是按下按键,如果你的输入法设置的不是默认英文状态,操作代码可能会得不到执行.所以朋友们,这个问题要注意.
Application.SendKeys 参数附表:
键名 代码
| Backspace {BACKSPACE} 或 {BS}
| Break {BREAK}
| Caps Lock {CAPSLOCK}
| 清除 {CLEAR}
| Delete 或 Del {DELETE} 或 {DEL}
| 向下键 {DOWN}
| 结束 {END}
| Enter(数字小键盘) {ENTER}
| Enter ~(波形符)
| Esc {ESCAPE} 或 {ESC}
| 帮助 {HELP}
| 主页 {HOME}
| Ins {INSERT}
| 向左键 {LEFT}
| Num Lock {NUMLOCK}
| PageDown {PGDN}
| PageUp {PGUP}
| Return {RETURN}
| 向右键 {RIGHT}
| Scroll Lock {SCROLLLOCK}
| Tab {TAB}
| 向上键 {UP}
| F1 到 F15 {F1} 到 {F15} </table>
| 还可指定与 Shift 和/或 Ctrl 和/或 Alt 组合使用的键。若要指定与其他键组合使用的键,可使用下表。
| [table]
| 要组合的键 在键代码之前添加
| Shift +(加号)
| Ctrl ^(插入符号)
| Alt %(百分号) |
|
评分
-
6
查看全部评分
-
|