Excel vba,打开新的应用程序:Microsoft Excel正在等待另一个应用程序来完成一个OLE操作

我有以下vba代码。 它创build新的Excel应用程序并使用它来打开文件。 然后MsgBox在这个文件中的一些单元格的值。

Sub TestInvis() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") Dim WB As Workbook Set WB = ExcelApp.Application.Workbooks.Open("Y:\vba\test_reserves\test_data\0503317-3_FO_001-2582480.XLS") Dim title As String title = WB.Worksheets(1).Cells(5, 4).Value MsgBox (title) WB.Save WB.Close ExcelApp.Quit Set ExcelApp = Nothing End Sub 

问题是MsgBoxing后,它减慢,并最终使Microsoft Excel is waiting for another application to complete an OLE action窗口。 为什么这样做? 这不像是有任何硬命令正在执行。 我该如何处理呢?

发生这种情况是因为ExcelApp的Excel实例很可能正在等待用户input。

您可以尝试添加ExcelApp.DisplayAlerts = False以跳过可能存在的任何popup窗口。

而且,在排除故障的同时添加ExcelApp.Visible = True以便您可以在第二个实例中查看发生了什么,并在那里排除故障。

我在以下情况遇到这个问题:

  • 警报已由应用程序实例打开,正在等待用户input。
  • 在打开一个文件的时候,当文件被打开以及是否打开保存的版本或者内存版本的时候(当然这应该发生在msgBox之前)
  • 如果您多次运行代码并崩溃,则可能会将该文件打开为只读状态,因为还有另一个隐藏的Excel实例将其locking(请检查您的任务pipe理器以了解其他Excel进程)

请放心,无论如何,问题不在于你的代码本身 – 它在这里运行良好。

代码适合我。

您可以从FileDialog中select文件。 在注释中您拥有closures工作簿而不保存更改的代码。 希望能帮助到你。

 Option Explicit Sub Import(Control As IRibbonControl) Dim fPath As Variant Dim WB As Workbook Dim CW As Workbook On Error GoTo ErrorHandl Set CW = Application.ActiveWorkbook fPath = Application.GetOpenFilename(FileFilter:="Excel file, *.xl; *.xlsx; *.xlsm; *.xlsb; *.xlam; *.xltx; *.xls; *.xlt ", Title:="Choose file You want to openn") If fPath = False Then Exit Sub Application.ScreenUpdating = False Set WB = Workbooks.Open(FileName:=fPath, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True) Set WB = ActiveWorkbook MsgBox("File was opened.") 'Application.DisplayAlerts = False 'WB.Close SaveChanges:=False 'Application.DisplayAlerts = True 'MsgBox ("File was closed") Exit Sub ErrorHandl: MsgBox ("Error occured. It is probable that the file that You want to open is already opened.") Exit Sub End Sub