vba shell java_在VBA中使用Windows SHELL命令

想要文件关闭的时候进行备份?想要把DOS命令加入到日常中的应用中来?没问题,用SHELL就行了。

例如,你前台一启动的时候就自动建立虚拟盘,可以在LOAD事件里加入:

Shell "subst X: D:\ushare\FILE"

这样就可以在文件打开的时候自动把D:\ushare\FILE映射成X盘,有利于文件分发。

同理,也可以加入其它的如XCOPY命令来备份。当然,你要是把DOS命令做成一个BAT文件执行,用SHEEL "PATH",1 来执行。SHEEL语句后面的那个1的意思如下:

常数 值 描述

vbHide        0 窗口是隐藏的,并且焦点被传递给隐藏窗口。

vbNormalFocus   1 窗口拥有焦点,并且恢复到原来的大小与位置。

vbMinimizedFocus   2 窗口缩小为图符并拥有焦点。

vbMaximizedFocus   3 窗口最大化并拥有焦点。

vbNormalNoFocus   4 窗口被恢复到最近一次的大小与位置,当前活动窗口仍为活动窗口。

vbMinimizedNoFocus 6 窗口缩小为图符,当前活动窗口仍为活动窗口。

示例1,将文件从text.txt和text_text.txt,从D盘复制到E盘中,如下:

Sub test()

Dim retval

retval = Shell("XCOPY D:\test.txt E:\", 0)

MsgBox retval

End Sub

Sub test1()

Dim doscmd

doscmd = "XCOPY D:\test_test.txt E:\"

Shell doscmd, 0

End Sub

示例2,在window系统中,通过在vba中执行BAT文件,而在BAT文件中执行R程序的方式【参考:R语言-自动批处理文件】,从而实现在vba运行R程序的目的,如下:

在vba建立过程 test2 或 test4 :

Sub test2()

Dim dosCmdPath, retval

dosCmdPath = "D:\abdata\vbaR\DosCmdR.bat"

retval = Shell(dosCmdPath, 0)

MsgBox retval

End Sub

Sub test4()

'用 wsscript.shell 方法去调用 .bat

'就一定会等bat运行完毕才进入下一行VBA

Dim WSH As Object

Dim wExec As Object

Dim RunResult

Set WSH = CreateObject("WScript.Shell")

Set wExec = WSH.Exec("D:\abdata\vbaR\DosCmdR.bat")

RunResult = wExec.StdOut.ReadAll '这个是运行结果的DOS屏幕输出

Application.Wait (Now + TimeValue("0:00:05"))

MsgBox RunResult

Set WSH = Nothing

Set wExec = Nothing

End Sub

在 "D:\abdata\vbaR" 路径中,建立DosCmdR.bat文件,如下:

cd C:\Program Files\R\R-3.3.3\bin

Rscript D:\abdata\vbaR\test.R

在 "D:\abdata\vbaR" 路径中,建立test.R文件,如下:

get_time_human

format(Sys.time(), "%Y%m%d_%H%M%OS")

}

a

b

print(a)

print(b+a)

filePath

Sys.sleep(5)

write.csv(a,file=filePath)

类模块名称:VBA中调取R程序【vbaR】

Option Explicit

'===============================================================

'oRunDos1 | (vba 运行 dos 命令,dos命令调取R程序)

'***************************************************

'参数说明:

'oPath | .bat文件路径

'***************************************************

'示例:

'oPath | D:\abdata\vbaR\DosCmdR.bat

'***************************************************

'

Public Function oRunDos1(ByVal oPath)

Dim dosCmdPath, retval

dosCmdPath = oPath

retval = Shell(dosCmdPath, 0)

' MsgBox retval

End Function

'===============================================================

'oRunDos2 | (vba 运行 dos 命令,dos命令调取R程序)

'***************************************************

'参数说明:

'oPath | .bat文件路径

'***************************************************

'示例:

'oPath | D:\abdata\vbaR\DosCmdR.bat

'***************************************************

'

Public Function oRunDos2(ByVal oPath)

'用 wsscript.shell 方法去调用 .bat

'就一定会等bat运行完毕才进入下一行VBA

Dim WSH As Object

Dim wExec As Object

Dim RunResult

Set WSH = CreateObject("WScript.Shell")

Set wExec = WSH.Exec(oPath)

RunResult = wExec.StdOut.ReadAll ' 这个是运行结果的DOS屏幕输出

Application.Wait (Now + TimeValue("0:00:05"))

'MsgBox RunResult

Set WSH = Nothing

Set wExec = Nothing

End Function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值