VBA学习(11):用Excel控制电脑关机和重启

今天给大家简单聊一下如何使用Excel VBA 操作DOS,聊几个比较典型的案例,比如关机、关指定程序、获取多层文件夹下文件名等。

Sub QsbC() '关机
    Shell "cmd /c shutdown -s"
End Sub

第2行代码使用Shell函数执行DOS命令。

shutdown -s 是关机。

shutdown -r 是重启。

shutdown -h 是休眠。

shutdown -s -t 是倒计时关机。

然后再来说下如何关闭指定程序,比如强制关闭Excel。

正常来说,用以下语句也可以关闭Excel,但有时关的并不彻底,Excel程序依然存在于进程中。

Sub quit()
    Application.quit
End Sub

此时不妨试试以下语句

Sub CloseExcel() '强制关闭excel进程
    Shell "cmd /c Taskkill /im winexcel.exe /f /t"
End Sub

又或者关闭Word

Sub CloseWD() '强制关闭word进程
    Shell "cmd /c Taskkill /im winword.exe /f /t"
End Sub

最后再给大家分享一下使用DOS语句获取多层文件夹下文件名。之前也给大家分享过【FSO+递归】的方法,不过代码比较繁琐,效率也不是很高。相比之下,DOS方法就简洁太多了。

Sub getLst()
    Dim temp, r, p$
    p = "E:\公众号运营" '指定路径
    temp = CreateObject("Wscript.Shell").exec("cmd /c dir /a-d /b /s " & Chr(34) & p & Chr(34)).StdOut.ReadAll
    r = Split(temp, vbCrLf) '拆分文件名
    [a:a] = ""
    [a2].Resize(UBound(r) + 1) = Application.Transpose(r)
End Sub

第4行代码使用CreateObject("Wscript.Shell")类库的Exec方法执行DOS语句。这个类库相比Shell函数的一大优势是:它不但可以执行DOS命令,还可以返回DOS命令的执行进度和结果。

第5行代码将变量temp按换行符拆分成一维数组,这里可以搭配Filter函数作进一步筛选,比如,只获取名称中包含"看见星光"的文件,可以将代码修改为:

r = Filter(Split(temp, vbCrLf), "看见星光")

第6和第7行代码将结果存入当前工作表的A列。

技术交流,软件开发,欢迎加微信xwlink1996 


作者其他作品:

VBA实战(Excel)(1):提升运行速度

Ribbon第一节:控件大全

HTML实战(1):新建一个HTML

VB.net实战(VSTO):Excel插件的安装与卸载

 

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值