0

基本上我有一个批处理文件,我正在使用 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

filecommand 是批处理文件的完整路径。当我运行此代码时,出现以下错误

'C:\Users\UserName\Desktop\Move.bat' 不是内部或外部命令、可运行程序或批处理文件。

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

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

已移动 1 个目录。找不到批处理文件。

它只移动了 1 个文件夹。

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

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

  • 文本文件到批处理文件
  • runCmd 批处理文件
  • 批处理文件到文本文件

这会导致错误吗?

4

1 回答 1

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
于 2013-11-01T17:54:04.307 回答