想要文件关闭的时候进行备份?想要把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程序的方式,从而实现在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 <- function() {
format(Sys.time(), "%Y%m%d_%H%M%OS")
}
a <- 1
b <- 2
print(a)
print(b+a)
filePath <- paste('D:/abdata/vbaR/test', '_', get_time_human(), '_', '.csv', sep='')
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
©哈尔滨商业大学 银河统计工作室