执行 AutoIt 并等待完成
Execute AutoIt and wait for finish
我需要实现一个宏,该宏在 运行 自动执行并完成 运行 程序后 运行 是宏的其余部分。
我尝试了 Shellandwait(),但没有找到解释它的文档。
我拿了那个论坛的其他代码示例并得到了这个:
Sub autoit()
Dim hProcess As Long
Dim xPath As String
Dim wsh As Object
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Set wsh = CreateObject("WScript.Shell")
xPath = Application.ActiveWorkbook.Path
hProcess = wsh.Run("D:\Program Files\autoit-v3\install\AutoIt3_x64.exe " _
& xPath & "\leandro.au3", 0, True)
Workbooks.Open (xPath & "\Mudança " & Format(Date, "dd_mm_yyyy") & ".csv")
End Sub
当我 运行 它 returns 我这个错误:
"Run-time error '-2147024894 (80070002)': Method 'Run' of object 'IWshShell3' failed"
我不知道这是什么意思,我也不知道解决办法。
如果 xPath
中有任何空格,您需要将表达式用引号引起来。
试试这样的方法:
xPath = ActiveWorkbook.Path
With CreateObject("WSCript.Shell")
.Exec "CMD /C START /WAIT ""D:\Program Files\autoit-v3\install\AutoIt3_x64.exe"" """ & xPath & "\leandro.au3"""
End With
让我分享两个 VBA 代码示例,用于从 AutoIt 脚本捕获输出流(从 STDOUT 流读取)
VBA代码:
Dim sFilePath As String
Dim objShell As Object, objCmdExec
sFilePath = String(1, 34) & Application.ActiveWorkbook.path & Application.PathSeparator & "test0.au3" & String(1, 34)
Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objShell.exec("""C:\Program Files (x86)\AutoIt3\AutoIt3.exe"" " & sFilePath)
MsgBox (objCmdExec.StdOut.ReadAll)
这是第一个测试 (test0.au3) 的 AutoIt 脚本:
Global $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
WinWait("[CLASS:Notepad]", "", 10)
Sleep(2000)
Send("Hello")
Sleep(1000)
ProcessClose($iPID)
ConsoleWrite("Done" & @CRLF)
我发现另一个有用的选项是 vba class:
VBA Run Application - Capture Output。作者:dmaruca。最后更新时间 2012
举个例子:
Dim sFilePath As String
sFilePath = ThisWorkbook.path & Application.PathSeparator & "test.au3"
Dim RunApp As New CRunApp
RunApp.Command = "C:\Program Files (x86)\AutoIt3\AutoIt3.exe"
RunApp.AddParamater sFilePath
RunApp.AddParamater "Buenos días"
MsgBox RunApp.RunAppWait_CaptureOutput()
以及用于测试的脚本 (test.au3):
MsgBox(4096, 'AutoIt MsgBox', $CmdLine[1])
ConsoleWrite($CmdLine[1] & @CRLF & "From: " & @ScriptName)
我需要实现一个宏,该宏在 运行 自动执行并完成 运行 程序后 运行 是宏的其余部分。 我尝试了 Shellandwait(),但没有找到解释它的文档。
我拿了那个论坛的其他代码示例并得到了这个:
Sub autoit() Dim hProcess As Long Dim xPath As String Dim wsh As Object Dim waitOnReturn As Boolean: waitOnReturn = True Dim windowStyle As Integer: windowStyle = 1 Set wsh = CreateObject("WScript.Shell") xPath = Application.ActiveWorkbook.Path hProcess = wsh.Run("D:\Program Files\autoit-v3\install\AutoIt3_x64.exe " _ & xPath & "\leandro.au3", 0, True) Workbooks.Open (xPath & "\Mudança " & Format(Date, "dd_mm_yyyy") & ".csv") End Sub
当我 运行 它 returns 我这个错误:
"Run-time error '-2147024894 (80070002)': Method 'Run' of object 'IWshShell3' failed"
我不知道这是什么意思,我也不知道解决办法。
如果 xPath
中有任何空格,您需要将表达式用引号引起来。
试试这样的方法:
xPath = ActiveWorkbook.Path
With CreateObject("WSCript.Shell")
.Exec "CMD /C START /WAIT ""D:\Program Files\autoit-v3\install\AutoIt3_x64.exe"" """ & xPath & "\leandro.au3"""
End With
让我分享两个 VBA 代码示例,用于从 AutoIt 脚本捕获输出流(从 STDOUT 流读取)
VBA代码:
Dim sFilePath As String
Dim objShell As Object, objCmdExec
sFilePath = String(1, 34) & Application.ActiveWorkbook.path & Application.PathSeparator & "test0.au3" & String(1, 34)
Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objShell.exec("""C:\Program Files (x86)\AutoIt3\AutoIt3.exe"" " & sFilePath)
MsgBox (objCmdExec.StdOut.ReadAll)
这是第一个测试 (test0.au3) 的 AutoIt 脚本:
Global $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
WinWait("[CLASS:Notepad]", "", 10)
Sleep(2000)
Send("Hello")
Sleep(1000)
ProcessClose($iPID)
ConsoleWrite("Done" & @CRLF)
我发现另一个有用的选项是 vba class:
VBA Run Application - Capture Output。作者:dmaruca。最后更新时间 2012
举个例子:
Dim sFilePath As String
sFilePath = ThisWorkbook.path & Application.PathSeparator & "test.au3"
Dim RunApp As New CRunApp
RunApp.Command = "C:\Program Files (x86)\AutoIt3\AutoIt3.exe"
RunApp.AddParamater sFilePath
RunApp.AddParamater "Buenos días"
MsgBox RunApp.RunAppWait_CaptureOutput()
以及用于测试的脚本 (test.au3):
MsgBox(4096, 'AutoIt MsgBox', $CmdLine[1])
ConsoleWrite($CmdLine[1] & @CRLF & "From: " & @ScriptName)