想要文件關閉的時候進行備份?想要把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 <- 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
