如果宏在调用 VBS 时引发错误,如何安全地退出 EXCEL



my VBS:

Dim WshShell, strCurDir
Set objExcel = CreateObject("Excel.Application")
Set WshShell = CreateObject("WScript.Shell")
strCurDir = WshShell.CurrentDirectory
Set objworkBook = objExcel.Workbooks.Open(strCurDir & "MasterSheetFetchJob.xlsm")
objworkBook.Fullflow
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
WScript.Quit

全流量:

Sub Fullflow()
Dim Host
Set Host = CreateObject("BZWhll.WhllObj")
Retval = Host.Connect("A")
If (Retval) Then
'Host.MsgBox "Error connecting to session A!", 48
End If
Host.ReadScreen localorvpn, 28, 2, 2
'Enter Command in the TPXA or L TPX based on the connection Type
If localorvpn = "PLEASE ENTER 'Command' TO LOGON" Then
Host.WriteScreen "tpx", 3, 4
Else
Host.ReadScreen vpn, 13, 17, 5
If vpn = "L application" Then
Host.WriteScreen "L TPX", 24, 7
Else
'MsgBox ("Already logged in")
Exit Function
End If
End If
Host.SendKey "<ENTER>"
'Waitfor UserId Text to appear in Login screen
WaitForScreen "Userid", 11, 5
Host.SendKey Username
Host.SendKey "<TAB>"
Host.SendKey mfp
Host.WaitReady 10, 1000
Host.SendKey "<ENTER>"
WaitForScreen "MSGID", 1, 2
Host.SendKey "<ENTER>"
'TPXMenu....
WaitForScreen "Sessid", 6, 6
End Sub

当一切正常时,它可以正常工作..但是在执行过程中,如果主机有一些问题..它停止执行很好..但是如果我们打开excel,它只是准备好而不是打开..如果我们再次运行而不杀死excel..工作簿已损坏且无法使用..

所以每次我们在开始执行之前杀死Excel时......但问题是如果我们还有其他一些未保存的工作簿也被关闭。这是处理此错误的唯一方法吗?

有什么建议吗?

  1. 我首先以不同的方式调用FullFlowSub(在脚本代码中(: 我会改变

    objworkBook.Fullflow

objExcel.Application.Run "'" & strCurDir & "MasterSheetFetchJob.xlsm" & "'!Fullflow"
  1. 那么,是不是还有其他可能避免将密钥发送到"主机"应用程序?我的意思是,使用API(FindWindow,FindWindowEx和SendMessage(。使用 Spy++ 查看窗口子项 3 并找到适当的方法来确定控件处理程序...我不使用此应用程序。否则,我可以帮助一些特定的代码...

  2. 只是出于好奇:为什么您使用 Excel 来运行该函数,该函数不会在工作表上返回任何内容(从我所看到的(,而不是直接在 VBScript 中编写该函数?我想不会有太大的不同...除非你需要 API 和 VBScript 在这方面有问题。

最新更新