2014-09-01 77 views
1

我創建了一個創建兩個文件的vba腳本。 .vbs文件用於打開外部程序併發送按鍵。該程序通過.bat文件調用。外部程序(Mathcad)打開,但不會執行後面的操作(sendkeys)。我怎麼才能調試.vbs文件,除非有人能發現錯誤?VBA - 創建.vbs和.bat來向外部程序發出擊鍵

Public Sub Execute_Mathcad() 

Dim ExportPath As String 
Dim iFileNum As Long 
Dim iFileNumvbs As Long 
Dim wsActive As Worksheet 
Dim sTempFileName As String 
Dim sTempFileNamevbs As String 

Set wsActive = ActiveSheet 

ThisWorkbook.Save 

'Create batch file 
With wsActive 

    'create .vbs file for keystrokes (called in .bat file) 
    ExportPath = "C:\Temp\" 
    sTempFileNamevbs = ExportPath & Trim(.Name) & ".vbs" 
    iFileNumvbs = FreeFile 
    Open sTempFileNamevbs For Output As #iFileNumvbs 
    Print #iFileNumvbs, "Set WshShell = WScript.CreateObject(" & Chr(34) & "WScript.Shell" & Chr(34) & ")" 
    Print #iFileNumvbs, "WshShell.Run(" & Chr(34) & "C:\Users\blah.xmcd" & Chr(34) & ")" 
    Print #iFileNumvbs, "WScript.Sleep 10000" 
    Print #iFileNumvbs, "WshShell.AppActivate"; Spc(1); "WshShell" 
    Print #iFileNumvbs, "WScript.Sleep 5000" 
    Print #iFileNumvbs, "WshShell.SendKeys"; Spc(1); """^{F9}""" 

    'create .bat file 
    sTempFileName = ExportPath & Trim(.Name) & ".bat" 
    iFileNum = FreeFile 
    Open sTempFileName For Output As #iFileNum 
    Print #iFileNum, "@Echo off" 
    Print #iFileNum, "wscript"; Spc(1); """C:\Temp\Results.vbs""" 
End With 

Close #iFileNum 
Close #iFileNumvbs 

'run batch file 
retVal = Shell(sTempFileName, vbHide) 

'this returns an error if sTempFileName is incorrect 
If retVal = 0 Then 
    MsgBox "An Error Occured" 
    Close #FileNumber 
    End 
End If 

'exit Excel using VBA command 
Application.Quit 

End Sub 
+0

你可以發佈它創建的BAT文件嗎? – 2014-09-01 14:00:29

+0

嗨馬克,它包含在上面的腳本,除非我誤解了?'打印#iFileNum,「@Echo關」 打印#iFileNum,「wscript」; SPC(1); 「」 「C:\ TEMP \ Results.vbs」 「」'。生成的批處理文件代碼如下所示:@Echo off wscript「C:\ Temp \ Results.vbs」「 – 2014-09-01 14:05:49

+0

您已發佈創建BAT的代碼,而不是BAT本身。 – 2014-09-01 14:07:48

回答

0

代碼糾正後,現在的作品。感謝大家的意見。我確信有一個更好的解決方案,但這是做這個工作!