2014-09-29 242 views
0

我試圖在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

回答

1

當命令從控制檯「作品」,但「失敗」時.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