VBA-创建.vbs和.bat以向外部程序发出击键

VBA-创建.vbs和.bat以向外部程序发出击键,vba,batch-file,vbscript,Vba,Batch File,Vbscript,我创建了一个vba脚本,它创建了两个文件。vbs文件用于打开外部程序并发送击键。此程序通过.bat文件调用。外部程序(Mathcad)将打开,但不会执行后续操作(sendkeys)。除非任何人都能发现错误,否则我如何调试.vbs文件 Public Sub Execute_Mathcad() Dim ExportPath As String Dim iFileNum As Long Dim iFileNumvbs As Long Dim wsActive As Worksheet Dim sTe

我创建了一个vba脚本,它创建了两个文件。vbs文件用于打开外部程序并发送击键。此程序通过.bat文件调用。外部程序(Mathcad)将打开,但不会执行后续操作(sendkeys)。除非任何人都能发现错误,否则我如何调试.vbs文件

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

代码已更正,现在可以工作了。谢谢大家的意见。我相信有一个更整洁的解决方案,但这确实有效

你也可以发布它创建的BAT文件吗?你好,马克,除非我误解,否则它包含在上面的脚本中?
Print#iFileNum,“@Echo off”Print#iFileNum,”wscript;Spc(1);“C:\Temp\Results.vbs”“”
。生成的批处理文件代码如下所示:
@Echo off wscript“C:\Temp\Results.vbs”
您发布了创建BAT的代码,而不是BAT本身。此外,.vbs文件如下所示:
Set WshShell=wscript.CreateObject(“wscript.Shell”)WshShell.Run(“C:\Users\blah.xmcd”)wscript.Sleep 10000 WshShell.AppActivate“Mathcad”WScript.Sleep 5000 WshShell.SendKeys“^{F9}”
如果使用
CSCRIPT/NOLOGO C:\Temp\Results.VBS从命令提示符运行VBS会发生什么情况