VBA中启动其它程序

  • 前言
  • VBA自带的Shell方法
    • 语法
    • 示例
    • 参数
    • 返回值
  • WshShell对象
    • WshShell对象的Run()方法
      • 语法:
      • 示例:
      • 参数:
      • 返回值:
    • WshShell对象的exec()方法
      • 语法:
      • 示例:
      • 参数
      • 返回值
    • Run()方法与Exec()方法的差异

前言

在程序处理流程中,经常需要调用其它程序,比如需要先将文件解压缩后再解析解压缩后的文件。
方法很多,最常用的是用VBA自带的Shell方法。或者用WshShell 对象的exec方法或是Run 方法也可以。
两者各有优缺点。Shell方法可以取得程序句柄,而如果想取得命令行程序执行结果,则需要用WshShell对象的exec()方法。

VBA自带的Shell方法

这是最简单的方法,尤其适用于打开GUI程序。打开后,后续操作由其它的代码控制(比如RPA)

语法

Shell(pathname, [ windowstyle ])
参见微软官方文档

示例

Sub Test4()Dim dblHandle As DoubledblHandle = Shell("python", vbNormalFocus)Debug.Print dblHandleEnd Sub

参数

参数1:要打开的程序路径及名称。如果已经在系统Path参数里设置过了,也可以不带路径,只放程序名,甚至扩展名也可以不用写
参数2:打开程序的窗口样式

返回值

返回一个Double 类型的数值,代表打开程序的句柄,也就是在任务管理器中的PID.
如果是做RPA程序,那么取得PID是非常重要的。
Shell()是异步的,打开程序后,即可执行后续代码。

WshShell对象

请参见本人的另一篇文章 关于WshShell对象

WshShell对象的Run()方法

语法:

objWshShell.Run strCommand, [intWindowStyle], [bWaitOnReturn]

示例:

Sub test2()Dim objWshShell As New WshShellDim lngReturn As LonglngReturn = objWshShell.Run("notepad.exe c:\temp\test.txt ", 1, False)objWshShell.Popup lngReturn, 5, "Information", vbOKOnly     Set objWshShell = NothingEnd Sub

参数:

参数1:命令行语句
参数2: 打开的窗口类型

参数3:是否等到用户关闭该程序再返回。如果是True, 程序会一直等待直到打开的application被关闭。如果是False, 则打开程序后会立即继续执行。
注意:
如果命令行语句中要打开的程序名称错误,并不是返回一个错误代码,而是VBA程序本身提示错误,所以一定要确保程序名称正确。

返回值:

返回值是一个long 类型数值。正常情况返回0

WshShell对象的exec()方法

语法:

objWshShell.Exec strCmd

示例:

Sub TEST3()Dim objWshShell As New WshShellDim objExec As WshExecDim intChoice As IntegerDim strMsg As String'用7Zip 解压软件的命令行程序解压缩Set objExec = objWshShell.Exec("7z e c:\temp\test.zip  -aoa -o c:\temp\Test\)strMsg = objExec.StdErr.ReadAllobjWshShell.Popup strMsg, 5, "Error", vbOKOnlySet objWshShell = NothingSet objExec = Nothing
End Sub

参数

只有一个参数,命令行语句。
同Run()方法一样,如果命令行语句中要打开的程序名称错误,并不是返回一个错误代码,而是VBA程序本身提示错误,所以一定要确保程序名称正确。

返回值

返回一个WshExec对象。可以通过该对象的StdErr对象取得错误信息。

与Run() 方法不同, Exec()方法并没有同步或异步的选择。打开程序后,代码会立即继续执行。但是,如果要读取WshExec对象,则必须等到程序被关闭才行。

Run()方法与Exec()方法的差异

参见文章Differences between Run and Exec (VBScript)

对于文章中Exec()可以打开GUI程序的观点,不赞同。实践证明,Run()方法和Exec()方法都可以打开GUI程序。

如果Excel()方法需要同步执行,则需要通过cmd来实现。

Sub TEST3()Dim objWshShell As New WshShellDim objExec As WshExecDim intChoice As IntegerDim strMsg As StringDim comspec As Stringcomspec = objWshShell.ExpandEnvironmentStrings("%comspec%")  '取得cmd命令的完全路径名Set objExec = objWshShell.Exec(comspec & " /c F:\SysPrograms\WeChat\WeChat.exe")DoDebug.Print objExec.StdOut.ReadLine()Loop While Not objExec.StdOut.AtEndOfStreamSet objWshShell = NothingSet objExec = Nothing
End Sub

VBA中启动其它程序相关推荐

  1. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

    使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...

  2. 从 HTA 中启动应用程序

    从 HTA 中启动应用程序 作者: sterben 发布: 2021年11月25日  24阅读  0评论 如何从 HTA 中启动应用程序? 问: 您好,脚本专家!对于 HTA,有没有什么可以替代 Ws ...

  3. 程序代码初学者_初学者:如何使用热键在Windows中启动任何程序

    程序代码初学者 Assigning shortcut keys to launch programs in Windows is probably one of the oldest geek tri ...

  4. c语言wscript.echo用法,WScript.Shell和一种替换方法(如何从 HTA 中启动应用程序?)...

    您好,DL.是的,我们确实知道这样的命令,可以在 HTA 中使用并可以替代 Wscript.Shell 命令,我们一会儿就会向您介绍.不过,在介绍它之前,我们应注意到您实际上可以在 HTA 中使用 W ...

  5. android 在窗口中启动应用程序,Android中使用am命令实现在命令行启动程序详解

    在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. usage: am [subcommand] [options] start an Activity: ...

  6. 程序开源与不开源区别_如何在公司中启动开源程序

    程序开源与不开源区别 许多互联网规模的公司,包括Google,Facebook和Twitter,都建立了正式的开源程序(有时也称为开源程序办公室,简称OSPO),这是公司内部支持开源消费和生产的指定场 ...

  7. windows命令行中 启动应用程序

    目的: 效果 方法 1. 创建批处理脚本 2. 设定环境变量 3. 测试功能 4. 扩展功能 目的: 在windows的命令行界面中,输入简单的几个字符就可以启动相应的应用程序. 例如: 输入mail ...

  8. 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题

    无法启动此程序,因为计算机中丢失 MSVCP120.dll.尝试安装该程序以解决此问题 参考文章: (1)无法启动此程序,因为计算机中丢失 MSVCP120.dll.尝试安装该程序以解决此问题 (2) ...

  9. PB程序“无法启动此程序,因为计算机中丢失PBvm90.dll。尝试重新安装该程序以解决此问题”的解决方法

    PB程序"无法启动此程序,因为计算机中丢失PBvm90.dll.尝试重新安装该程序以解决此问题"的解决方法 参考文章: (1)PB程序"无法启动此程序,因为计算机中丢失P ...

  10. 电脑安装python为什么显示的是程序丢失-python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

最新文章

  1. loadrunner基础知识问答(转)
  2. java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏
  3. 存储器是计算机的记忆装置,存储器(Memory)
  4. java实体序列化_java – 在JPA实体序列化(JSON)上防止JAX-RS中...
  5. 从大数据到深度学习,这些年度开源“新秀”你可用过?
  6. centos7解压安装mysql_CentOS7 安装Mysql5.7 解压缩版
  7. User Agent跨站攻击
  8. 【码云周刊第 8 期】面试之前,或许该高效率地学点干货了!
  9. 颠覆三观,内存真能当SSD用了!!!
  10. 使用exceljs导出excel表格
  11. 笔记本电脑怎么拆开后盖_联想笔记本电脑怎么拆开后盖_联想笔记本怎么拆
  12. 个人计算机显示器配置,怎么看电脑显示器配置
  13. 非常不错的停用词词表
  14. 中文姓名按照拼音排序-python
  15. 分享一款免费OPC UA服务器
  16. FLASH大厅安装错误3070修复解决方案
  17. 【线性代数】线性组合,线性相关与生成子空间(linear combination, linear dependency span)
  18. 关闭在谷歌浏览器中关闭谷歌广告
  19. stm32正常运行流程图_深度分析:主流32位单片机为什么要学STM32?-可编程逻辑-与非网...
  20. JavaScript起源及发展

热门文章

  1. 清华大学计算机学院2019冬令营,清华大学2019人文社科冬令营初审结果公布
  2. 认识了解WMV 9 视频编解码器
  3. listmanager htdocs
  4. 论文阅读: (ECCV 2022) Content-Oriented Learned Image Compression
  5. 【解决办法】解决OneDrive登陆界面空白的方法
  6. android无法格式化sd卡,手机sd卡无法格式化怎么回事?手机sd卡无法格式化解决方法...
  7. IT人的求职技巧 中山大学新炬网络校园宣讲会
  8. STM32智能家居系统设计(门禁、人体感应、GSM远程控制)
  9. 2021年CentOS7安装Oracle11g全记录
  10. 招聘数据采集+Hive数据分析+数据可视化