我正在通过vb脚本运行宏,该脚本从数据库导入超过1000条记录并将它们复制到Excel工作表中,然后发送一封电子邮件说明报告已准备就绪。当我导入较少的记录(100或200)时,它运行正常。但是当我导入整个记录(超过1000个)时,我收到一条窗口消息“Microsoft Excel正在等待另一个应用程序完成OLE操作”,即使该程序运行正常。
有没有办法隐藏此消息。另外,如果我隐藏此消息,程序是否会继续运行?以下是我的代码:
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set rst = New ADODB.Recordset
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
cn.Open ("User ID=flt" & _
";Password=flts1hp" & _
";Data Source=SIH_PROD" & _
";Provider=MSDAORA.1" & _
";PLSQLRSet=0")
Set oxcel = New Excel.Application
Set wbk = oxcel.Workbooks.Add()
With oxcel
.ActiveSheet.Name = "Report"
strFileName = "C:\Users\extract.xlsx"
'headings
For i = 0 To rs.Fields.Count - 1
.Cells(row, col) = rs.Fields(i).Name
.Rows(row).RowHeight = 45
.Cells(row, col).WrapText = True
col = col + 1
Next
.Range("A2").Select
.Selection.CopyFromRecordset rs
With wbk
.Application.DisplayAlerts = False
On Error GoTo Error_Message
.SaveAs (strFileName), AccessMode:=xlExclusive, _
ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges
.Close
End With
.Quit
End With
With OutMail
.To = "vinod.chelladurai@abc.com"
.CC = ""
.BCC = ""
.Subject = "Done"
.Body = "Done"
.Send
End With
Set OutApp = Nothing
Set OutMail = Nothing
End Sub
答案 0 :(得分:0)
通过阅读你的问题(没有进入你的代码)
是 - 可以使用
对警报消息进行Diabled`Application.DisplayAlerts = False`
但这不会解决问题,
你的程序仍然无法执行。因为函数调用会有一些死锁,(我曾经遇到过这个问题)
尝试使用断点的debuggin并将其缩小到错误的函数调用
希望这会有所帮助
答案 1 :(得分:0)
您可以在长时间运行的任务之前使用此代码
Application.IgnoreRemoteRequests = True
使用Application.IgnoreRemoteRequests = False
答案 2 :(得分:0)
由于另一个奇怪的原因,我遇到了这个问题:在Excel脚本中,我正在写另一个Excel工作簿。有时,此消息出现。调试这种情况真是一团糟,因为在您杀死目标excel文件(我想在里面写的文件)之前,所有东西都被阻塞了。 最后,我发现了问题:Office 2013的一个错误(因为该pb在Office 2010中不存在)?我试图在标准宽度的标准单元格中放入文本(但实际上不大,实际上里面有一些vbLf)。通过将列的大小更改为100(最后,它与原始标准大小有所不同),然后在分散的pb内部进行写入! 例如在单元格中写入之前:
DocExcel.Sheets(1).Select
DocExcel.Sheets(1).Cells.ColumnWidth = 100
DocExcel.Sheets(1).Cells(1, 1).Select
奇怪,但是可以...