天天看点

VBA调用bat,doc 命令行 窗口关闭之后,VBA代码 再继续执行

VBA调用doc命令,doc窗口关闭之后,继续执行代码

Option Explicit

'Docワィンドワ閉じるした後、後続けの処理実施
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandel As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandel As Long, ByVal dwProcessld As Long) As Long
           

注:

如果你在程序中指定了Option Explicit,那么所有的变量都必须用Dim显式声明才可以使用。

'* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * ** *
'*                                                 *
'* Out対象ファイル作成(Tempフォルダー作成)                *
'* 作成日:2016/12/22                              *
'* 作成者:                               *
'* 更新日:                                        *
'* 更新者:                               *
'*                                                 *
'* * * * * * * * * * * * * * * * * * * ** * * * * * * * * ** * *
           
Public Sub createTempFolder()

On Error GoTo errl
         
    '■バッチ対象
    Dim BAT_CREATE_TEMP_TOOL As String: BAT_CREATE_TEMP_TOOL = _
                BAT_FILE_URL & "\" & BAT_CREATE_TEMP_TOOL_FILE_NAME
        
    'bat命令
    Dim cmdStr
    cmdStr = """" & BAT_CREATE_TEMP_TOOL & """" & " " & """" & OUT_FILE_PATH & """"
    'MsgBox cmdStr

    'バッチを実行する
    RetVal = Shell(cmdStr)
    
    processId = OpenProcess(&H100000, False, RetVal)
    r = WaitForSingleObject(processId, -1&)
    r = CloseHandle(processId)
    
    TEMP_FOLDER_EIXST_FLG = "1"
    
    
GoTo endok

errl:
    '異常処理
    ERROR_FLG = "1"
     
    ERROR_INFO_LIST.Add ("関数:「createTempFolder」で、エラー発生しました。")
    ERROR_INFO_LIST.Add ("エラー詳細:" & Err.Number & " : " & Err.Description)
        
endok:

End Sub
           

变量定义

'バッチファイルの保存場所
 BAT_FILE_URL = Mid(OUT_FILE_PATH, 1, indexOfOut - 1) & "Tool" & "\bat"

 BAT_CREATE_TEMP_TOOL_FILE_NAME = "CreateTempTool.bat"
           

CreateTempTool.bat

@echo off
set outDir=%1

cd /d %~d0
cd %outDir%
mkdir Temp
           

http://blog.csdn.net/sxzlc/article/details/53749868

bat中的[%~dp0]使用

扩展:

%0:表示批处理本身 

%~sdp0:

这里面的

d:表示扩展到批处理文件所在的盘符;

p表示扩展到批处理文件所在的路径.

假如批处理文件在c盘的123文件下的test文件夹下:

 c:\123\test\批处理文件:

d:表示c:\;

p表示123\test\

s:表示路径中含有短名 

cd /d %~sdp0:就表示进入批处理文件所在的文件夹中

cd /d %~d0:就表示进入批处理文件的盘符

其他方式调用bat

http://blog.csdn.net/sxzlc/article/details/53750128

■让工具更简洁 (不使用bat文件)

'bat命令
    Dim cmdStr
    cmdStr = "c\AAAA\BBB\xxx.exe param1 param2"
    'MsgBox cmdStr

    'バッチを実行する
    RetVal = Shell(cmdStr)
    
    processId = OpenProcess(&H100000, False, RetVal)
    r = WaitForSingleObject(processId, -1&)
    r = CloseHandle(processId)
           

原来的bat中,有多行命令时,可以多次执行,这样,就不用单独建立一个bat文件了。

===