运行命令行的Excel vba代码仅在添加断点时有效

时间:2013-11-01 17:10:51

标签: batch-file excel-vba vba excel

基本上我有一个使用excel vba中的runcmd函数运行的批处理文件

Function runCmd(fileCommand As String) As Boolean
    On Error GoTo Err_Hnd
    Dim strCmdPath As String
    strCmdPath = VBA.Environ$("COMSPEC")
    VBA.ChDir "C:\Users\" & Environ$("Username") & "\"
    VBA.Shell strCmdPath & " /c" & fileCommand, vbNormalFocus
    runCmd = True
Exit Function
Err_Hnd:
    runCmd = False
End Function

file命令是批处理文件的完整路径。当我运行此代码时,我收到以下错误

'C:\ Users \ UserName \ Desktop \ Move.bat'无法识别为内部或外部命令,可运行程序或批处理文件。

但是,当我在 runCmd = True 行放置一个断点并使用F8或F5运行代码时,它可以完美地运行。不知道为什么会这样。

编辑:在尝试了ChrisProsser的代码后,我得到了一个稍微不同的错误。 cmd提示符说 -

1 dir(s)被移动了。找不到批处理文件。

它只移动了1个文件夹。

不幸的是,这不是逐字的,因为我无法再次重新创建此错误,并且第一次没有记下错误。

所以更多信息 - 批处理文件实际上是一个文本文件,其中包含移动代码,该代码在运行时转换为批处理文件,并在执行此函数runCmd后返回到文本文件。 因此,这个过程是

  • textfile to batchfile
  • runCmd batchfile
  • batchfile to textfile

这会导致错误吗?

1 个答案:

答案 0 :(得分:0)

我不确定为什么这会在单步执行时起作用,但如果一次执行则不行,但我会尝试添加一个步骤来设置命令字符串然后执行它,例如。

Function runCmd(fileCommand As String) As Boolean
    On Error GoTo Err_Hnd
    Dim strCmdPath As String
    Dim strCmd as String
    strCmdPath = VBA.Environ$("COMSPEC")
    VBA.ChDir "C:\Users\" & Environ$("Username") & "\"
    strCmd  =  strCmdPath & " /c" & fileCommand, vbNormalFocus
    VBA.Shell strCmd
    runCmd = True
Exit Function
Err_Hnd:
    runCmd = False
End Function