ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9575|回复: 15

[分享] 使用VBA简单操纵其它应用程序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-6 10:31 | 显示全部楼层 |阅读模式
本帖最后由 gxp1986 于 2019-9-6 10:44 编辑

"当你日复一日的做着相同的操作时,应该考虑效率的问题了!"
                                                               -------我也不知道是谁说的

首先说明一下,这里说的操纵,其实意思是自动化执行一些指定动作.
要操纵程序,首先要使用VBA代码打开指定的外部程序:
  1. Dim labelshop
  2. labelshop = Shell("Explorer.exe 程序的地址", vbNormalFocus)
复制代码



附:

vbNormalFocus正常模式,vbMaximizedFocus最大化模式,vbMinimizedFocus最小化

有些程序从打开到加载完成,需要一些时间,所以我们要让VBA程序等待外部程序启动完成后再执行,不然代码就会得不到有效的执行.
所以我们需要用到:
  1. Application.Wait (Now + TimeValue("0:00:03"))
复制代码

TimeValue里面的时间,单位为秒,请测试你需要启动的程序,所需要的启动时间,再合理调整

最后是操作部分了.其实说白了,就相当于无鼠标,全键盘操作! 操作前,你可以查看一下外部程序的各种快捷方式,对你编写代码有很大帮助!

所以我们需要用到:
  1. Application.SendKeys "按键名" 或者 变量
复制代码


如果你需要输入一段字符,可以这样:
  1. Application.SendKeys "我是一串字符,或者一篇文章.如果字符串过长,可以作用变量"
复制代码
如果你需要打印,可以这样
  1. Application.SendKeys "^P"                '调出打印窗口
  2. Application.SendKeys "5"                  '设置打印的份数
  3. Application.SendKeys "~"                '回车开始打印
复制代码


其它参数明细,请查看最后面的附表.

值得一提的是:外部程序在执行过程中,也有可能需要等待时间!!!所以我们又要按需使用,以保证代码的正常运行
  1. Application.Wait (Now + TimeValue("0:00:03"))
复制代码


操作完成后,强迫症的我,懒到不想去点程序右上角的"X" ...,所以我用VBA来关闭掉这个外部程序...
下面的代码,以关闭 LabelShop.exe 程序为例.
如果你不知道程序的进程名字,可以调出"任务管理器"----"应用程序",右键你的程序,选择最后一行 "转到进程",抄下来就可以了
  1. Sub 关闭()
  2.   Set msoft = GetObject("winmgmts:").execquery("select * from win32_process where name like '%.exe'")
  3.     For Each S In msoft       '用s.name可以列出所有运行的exe文件
  4.       If S.Name = "LabelShop.exe" Then
  5.          S.Terminate
  6.       End If
  7.     Next
  8. 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

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-6 10:38 | 显示全部楼层
好贴,收藏学习。建议再整个完整案例就完胜了!感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-6 10:52 | 显示全部楼层
dongjuwen 发表于 2019-9-6 10:38
好贴,收藏学习。建议再整个完整案例就完胜了!感谢!

谢谢回复.我开始本来也想上传个附件的,但是后来想到这种操作针对性很强,如果要写个完整的个例的话,也只能是开个记事本啊什么的,都比较简单,所以就放弃了.想要真正做到全自动执行的话,需要各位按照自己的程序,慢慢调试才行

TA的精华主题

TA的得分主题

发表于 2019-9-6 15:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gxp1986 发表于 2019-9-6 10:52
谢谢回复.我开始本来也想上传个附件的,但是后来想到这种操作针对性很强,如果要写个完整的个例的话,也只能 ...

老师弄个案例吧。简单的案例也行。这样对于我们这些想学习的才容易理解。感谢!!!

TA的精华主题

TA的得分主题

发表于 2019-10-12 10:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-12-13 11:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-12-13 11:32 | 显示全部楼层
sendkey很有用,在網頁上大量重覆輸入很好
但不要用wait
整個程序暫停其實很有問題,還會有很多意想不到的輸出bug
更好的方法是空循環加 doevents
for i = 1 to 5000
doevents
next

tim = timer + 1
do
  doevents
loop until timer > tim

不要停止程序,給它空間繼續運行

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-6-17 10:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-3-7 20:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-3-7 21:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 15:03 , Processed in 0.048149 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表