Microsoft Excel正在等待另一个应用程序来完成OLE操作

时间:2014-03-13 13:14:58

标签: excel vba excel-vba

我正在通过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

3 个答案:

答案 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

奇怪,但是可以...