VBA调用Shell
文章目录
- VBA的Shell函数
- 函数参数介绍
- 过程等待
- 案例-执行Windows的bat文件
- 案例-mysql查询
- 案例-执行python脚本
- 案例-指定应用程序打开文件
- AppActivate语句
- EXCEL表格函数打开应用程序
- ShellExecute函数
- 函数介绍
- 函数API声明
- 案例:打开网页、图片、文本、EXCEL
VBA的Shell函数
函数参数介绍
Shell(PathName[,WindowStyle])
- PathName :要执行的程序名,包括目录或文件夹
- WindowStyle :程序运行时窗口的样式
Shell函数返回在第一个参数中指定的应用程序的任务标识。可以使用这个数字在稍后激活该任务;
Shell函数启动的应用正在运行时,VBA进程不会终止(类似于加入了进程等待)。
Shell函数异步运行应用程序,执行Shell函数后,还有其他过程,会与Shell函数内容同时执行;
Shell函数第二个参数WindowStyle的值:
常量 | 值 | 说明 |
---|---|---|
vbHide | 0 | 窗口将隐藏,并且焦点将传递给隐藏窗口。 |
vbNormalFocus | 1 | 窗口具有焦点且还原为其原始大小和位置。 |
vbMinimizedFocus | 2 | 窗口将显示为具有焦点的图标。 |
vbMaximizedFocus | 3 | 使用焦点最大化窗口。 |
vbNormalNoFocus | 4 | 窗口将还原为其最新的大小和位置。 当前活动窗口仍保持活动状态。 |
vbMinimizedNoFocus | 6 | 窗口将显示为图标。 当前活动窗口仍保持活动状态。 |
示例:
Function shell_func(Program As String)
' Program:应用名称
Dim TaskId As Double
On Error Resume Next
TaskId = Shell(Program, 1) ' 任务标识,参数1代表窗口具有焦点且还原为其原始大小和位置
If Err <> 0 Then ' 不等于0,表示报错MsgBox "无法打开应用:" & Program, vbCritical, "Error"
End If
End Function
过程等待
Shell在运行完之后会关闭小黑窗,处理快点几乎看不见,可以通过在命令行前加入cmd /k
,小黑窗不会关闭;
Shell "cmd /k ipconfig/all"
VBA等待shell执行完再执行后面进程,可以定义这么一个函数
Function ShellAndWait(cmd As String) As String Dim oShell As Object, oExec As ObjectSet oShell = CreateObject("WScript.Shell")Set oExec = oShell.exec(cmd) ' 执行cmd命令result = oExec.StdOut.ReadAll ' 读取命令行返回的内容,读完后再进行vba后面的逻辑处理;Set oShell = NothingSet oExec = Nothing
End Function
案例-执行Windows的bat文件
Shell "c:/bat_file.bat"
案例-mysql查询
Sub sql_to_txt()
Dim this_path,cmd As Stringthis_path = ThisWorkbook.Path ' 当前工作簿的路径
ChDrive "F" '切换磁盘渠道到F盘
ChDir this_path ' 切换路径,这样my_ndim_table文件就写入到工作簿所在目录下了
'-u账号 -p密码 库名mydb -e执行 "要执行的sql",> 查询结果重定向到txt文件
cmd = "cmd /k mysql -uroot -p123456 mydb -e ""select * from d_mg_game_ndim limit 20"" > my_ndim_table.txt"
shell cmd, 1
End Sub
案例-执行python脚本
' 打开jupyter notebook
Shell "jupyter notebook"' 执行python脚本
shell "python d:/python.py"
案例-指定应用程序打开文件
这里使用的是notepad++打开命名为my_ndim_table.txt的文本文件
ChDrive "c"
ChDir "C:\Program Files (x86)\Notepad++"
cmd_str = ".\notepad++.exe F:\桌面\my_ndim_table.txt"
Debug.Print cmd_strShell cmd_str, 1
AppActivate语句
如果一个程序已经在运行,使用shell函数会启动另一个实例,大多情况下,只需要激活正在运行的实例,而并非启动另一个实例。可以通过AppActivate
语句激活实例;
Sub StartCalculate()
Dim Program As String
Dim TaskId As DoubleProgram = "calc.exe" ' 计算器
On Error Resume Next '遇到错误,继续执行下面语句
AppActivate "计算器" ' 这里是应用程序面板的标题titile
If Err <> 0 Then ' 如果没有捕捉到‘计算器’程序,则err不等于0Err = 0TaskId = shell(Program, 1) ' 打开计算器If Err <> 0 Then MsgBox "无法打开计算器"
End If
End Sub
EXCEL表格函数打开应用程序
如果是在工作表里,我们可以使用该函数:
=HYPERLINK("C:\Windows\System32\calc.exe","打开计算器")
ShellExecute函数
函数介绍
使用API函数ShellExecute能打开任何文件(包括桌面和URL快捷方式)。ShellExecute解析系统注册表HKEY_CLASSES_ROOT中所有的内容,判断启动哪一个执行程序,并且启动一个新的实例或使用DDE将文件名连到一打开的实例。然后,ShellExecute返回打开文件的应用的实例句柄。
ShellExecute函数可以简单地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,则ShellExecute能打印文件或打开文件夹。
该函数只能启用已知文件名的应用程序(文件类型在Windows注册)
函数API声明
在模块中的声明部分输入如下声明语句
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, _ByVal ipOperation As String, ByVal lpFile As String, _ByVal lpParameters As String, ByVal lpDirectory As String, _ByVal nShowCmd As Long) As Long
声明关键词:
- Declare关键字:在模块级别中声明对动态链接库(DLL)中外部过程的引用。
- Function关键字:紧随Function的函数名是从VBA中调用该函数时要使用的名称。该名称可以与API函数本身的名称相同,也可以使用Declare语句中的Alias关键字,表示要在VBA中使用不同的名称(“别名”)调用该函数。
- Lib关键字:指明包含所声明过程或函数的动态链接库。它说明的是函数或过程从何而来的问题。例如在上例中,SetFocus Lib"user32"说明函数SetFocus来自“user32.dll”文件。
- Alias关键字:用于指定API函数的别名,如果调用的API函数要使用字符串(参数中包含String类型),则Alias关键字是必需的。这是因为在ANSI和Unicode字符集中同一API函数的名称可能是不一样的。为了保证不出现声明错误的情况,必须使用Alias关键字指出API函数的别名。
案例:打开网页、图片、文本、EXCEL
Sub open_url()
' 打开百度链接
res = ShellExecute(0&, vbNullString, "http://www.baidu.com", vbNullString, vbNullString, 1)' 打开图片
res = ShellExecute(0&, vbNullString, "F:\桌面\111.png", vbNullString, vbNullString, 1)' 打开txt文件
res = ShellExecute(0&, vbNullString, "my_ndim_table.txt", vbNullString, vbNullString, 1)' 打开excel表格
res = ShellExecute(0&, vbNullString, "F:\excel_file.xlsx", vbNullString, vbNullString, 1)
End Sub
VBA调用Shell相关推荐
- vba执行linux命令,如何使用vba的shell()运行参数的.exe?
我有一个目标文件路径的结构如下例所示. C:\Program Files\Test\foobar.exe /G 我需要做的就是使用vba的shell()命令来执行这个文件. 如何格式化文件路径以告诉S ...
- VBA调用bat,doc 命令行 窗口关闭之后,VBA代码 再继续执行
VBA调用doc命令,doc窗口关闭之后,继续执行代码 Option Explicit'Docワィンドワ閉じるした後.後続けの処理実施 Public Declare Function WaitForS ...
- 使用VBA调用jar传递参数,并获取返回值
目录 ■VBA代码 ■Java代码 ■运行效果 Excel Log效果 (通过VBA调用jar后,运行,生成的Log) ■课题 ■课题原因(直接原因) ●log4j的配置 ■课题验证 ■课题解决(其他 ...
- java无阻塞执行脚本,JAVA调用Shell脚本-及阻塞的解决方法
JAVA调用Shell脚本--及阻塞的解决办法 用java调用shell,使用 Process p=Runtime.getRuntime().exec(String[] cmd); Runtime.e ...
- python 调用shell命令的方法
转载: https://www.cnblogs.com/thinker-lj/p/3860123.html https://www.cnblogs.com/wenwangt/p/4897961.htm ...
- Java调用 shell脚本阻塞
Java在调用Shell时,要不断读取进程中标准输出和错误输出流的信息,否则缓冲区被写满就会造成子进程阻塞而无法继续运行下去,可起两个线程不断读取标准输出.错误流信息而不被阻塞 import java ...
- 从Ruby调用Shell命令
如何从Ruby程序内部调用Shell命令? 然后如何将这些命令的输出返回到Ruby? #1楼 上面的答案已经很不错了,但是我真的很想分享以下摘要文章:" 在Ruby中运行Shell命令的6种 ...
- 基于sparksql调用shell脚本运行SQL
[Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...
- Vim命令行模式调用shell命令方式(笔记)
本文为阅读vim实用技巧时的一部分笔记 在vim中操作时,我们能很方便德调用shell命令.下面选取了最有用的一些调用外部命令的方式: :shell:启动一个shell(输入exit返回vim) :! ...
最新文章
- mysql show processlist info null_关于查询mysql processlist的建议
- libmysqld_dev linux,Linux下python玩转MySQLdb
- linux编译l和l区别,linux 下 g++编译程序时-I(大写i) 与-L(大写l)-l(小写l) 的作用详解...
- armv6、armv7、armv7s及arm64
- 微信小程序云开发-支付
- prometheus + cadvisor + grafana 监控容器和服务器
- 送给计算机老师平安夜贺卡,平安夜小朋友送老师的贺卡寄语
- 2022考公务员难还是考研难?
- AI虚拟教练助你练出人鱼线,揭秘Keep AI运动技术实力
- 数学之美--计算机图形学中的数学方法论
- go语言导入自定义包出现: package xxx is not in GOROOT (/xxx/xxx) 的解决方案
- 跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利
- t460 拆解_ThinkPad T460s开箱及更换内存和硬盘
- 用volatile的视角,来打开JMM内存模型
- 改变命运的早上三分钟 之 三
- 天猫商品详情接口,天猫商品优惠券接口,天猫api接口,天猫价格监控接口,天猫比价接口,品牌维权接口,天猫销量api接口,接口代码可对接数据分析业务,品牌维权,比价业务,行业分析业务接口代码分享
- zabbix之3触发器/action及模板
- 小程序源码:登录已修复零象垃圾废品回收微信小程序源码下载,V2.8.2完整全开源前端+后端
- 特殊气体的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 基于深度学习的图像识别模型研究综述
热门文章
- 软件著作权申请注意事项——计算机软件著作权登记申请(R11申请)流程
- FormData对象用法
- Gitee+PicGo上传图片失败404 - {“status“:“404“,“error“:“Not Found“}
- html5自带可编辑文字属性
- 黑鲨鸿蒙系统手机,黑鲨4代参数_黑鲨4代手机参数配置
- 如何将Mac文件添加到 iCloud 云盘的具体操作方法!
- win10设置微信双开电脑登录多个微信,超级详细教程,小白也可轻松设置
- SQL126 平均活跃天数和月活人数
- L2TP客户端之Strongswan移植(二)
- 嵌入式行业的发展前景?