调用命令提示符并通过VBA中的Shell Exec执行命令

问题描述:

我试图在VBA Excel中使用Shell脚本在命令提示符上执行命令。当我在命令提示符下执行此命令时,它通过打印一个数字作为输出。但是当我在脚本中调用相同的命令时,它不会在消息框中显示此数字。调用命令提示符并通过VBA中的Shell Exec执行命令

Sub Button6_Click() 
    Dim oShell As Object 
    Dim objExecObject As Object 
    Set oShell = CreateObject("WScript.Shell") 
    Set objExecObject = oShell.Exec("cmd /c convert test2.jpg -fill black +opaque white -fill white -opaque white -print %[fx:w*h*mean]") 
    MsgBox (objExecObject.StdOut.ReadAll) 
End Sub 

我认为问题与Exec函数中的参数有多个单词。所以我试图通过串联一个字符串如下所示。但是这也行不通。

Dim command As String 
    command = "convert test2.jpg -fill black +opaque white -fill white -opaque white -print %[fx:w*h*mean] null:" 
    Set objExecObject = oShell.Exec("cmd /c " & command) 

似乎没有运行时错误,并且消息框总是返回空白而不打印数字。 FOR CLARITY,convert命令是ImageMagick提供的一个函数。

请告诉我如何在命令提示符下运行convert命令,并在消息框中输出命令提示符。

非常感谢。

+0

这工作。 Set objExecObject = oShell.Exec(“cmd/c convert test2.jpg -fill black + opaque white -fill white -opaque white -print%[fx:w * h * mean] null:”) null的命令是问题。还要确保文件的路径是绝对的,在我的情况下不是问题。 – user2048724 2014-09-29 15:04:55

当命令从控制台“作品”,但“失败”时.Exec'ed,通常的嫌疑人是

  1. pathes - >可执行文件和数据文件的使用援引全/绝对文件规范
  2. 权限 - >检查用户(S)/权益
  3. 控制台上运行一个shell VS .Exec启动一个进程

在你的情况的意义“的作品/失败”并不完全清楚。症状是“MsgBox不显示数字”。也许将写入转换为StdErr。因此,尝试:

MsgBox objExecObject.StdErr.ReadAll() 

或 - 更好 -

If Not objExecObject.StdErr.AtEndOfStream Then MsgBox objExecObject.StdErr.ReadAll() 

如果没有帮助,使用.RUN()的 “%COMSPEC%/ K”。

更新WRT评论:

开始从一个控制台和重新把它的输出转换为进一步检查的文件。

+0

1,2,3不是问题所在。你的代码都没有工作。当我使用Run时,该命令在cmd上工作,但我需要输出(在这种情况下为编号),以便我可以在excel单元格上编写该代码。随着跑步,我将无法做到这一点。 – user2048724 2014-09-29 14:38:09