Excel VBA:当macros尝试打开另一个工作簿时,正在等待另一个应用程序来完成一个OLE操作

标题的一点背景:我写了一个macros,打开工作簿上调用。 它会在共享目录上打开[共享]工作簿,并将一些信息提供给用户正在使用的工作簿。

任何使用这个工作表的用户都已经将共享目录映射到了他们的计算机上(并且macrosfind了正确的驱动器号)。

我已经在办公室用户多次testing过这个工作表。 我也testing了它,并且有两个人同时打开工作簿,以确认两个用户的macros能够同时从共享工作簿中提取数据。

到目前为止,我没有任何问题。

这张表然后被推广到我公司的其他多个用户。 总而言之,大约有40人预计会使用这张表(不一定总是在同一时间)。

其中一个用户位于波兰(我位于伦敦)。

当他打开工作簿时,他会得到一个“Microsoft Excel正在等待另一个应用程序完成OLE操作”的通知。 通知附带一个“确定”button。 按这个button似乎没有效果,工作簿有效挂在这个通知。

我在解决这个问题时遇到了很多麻烦,因为我无法复制它。 有没有人有一个想法,为什么会出现? 代码如下:

Sub PreliminaryDataImport() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim x As Variant Dim usename As String usename = Environ("USERNAME") Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook, wkbk As New Excel.Workbook Dim xlz As String, regions As String Dim LRow As Long, LCell As Long, LRow2 As Long Dim RegionList As String RegionList = "" xlz = Sheet1.Range("o1").Value & "\Region Planning\TestDB.xlsx" Set xlw = xlo.Workbooks.Open(xlz) If Not Sheet11.Range("S1").Value = xlw.Worksheets("validation") _ .Range("N1").Value Then MsgBox "YOU ARE USING AN OUT OF DATE VERSION" & vbLf & _ "Please check your inbox or contact xxxx for the current version." xlw.Close False Set xlo = Nothing Set xlw = Nothing Call Module7.ProtectSheets End End If x = CheckValidation(usename, xlw) '~~ Check to see if User has access to view/modify. '~~ If they have access, return regions On Error Resume Next For i = LBound(x) To UBound(x) regions = regions + " --- " & x(i) RegionList = RegionList + x(i) & ", " Sheet1.Cells(i + 2, 33).Value = x(i) Next If Err.Number <> 0 Then MsgBox "You do not have access to view or modify any regions." xlw.Close False Set xlo = Nothing Set xlw = Nothing End Else MsgBox "You have access to view and modify the following regions:" & vbLf _ & vbLf & regions & "---" 

我相信这个问题发生在代码的这个部分的某个地方,因为最后一行的msgbox没有在通知之前出现。 由于他位于远程,我无法从他的机器上运行debugging,这将是一个很大的努力(只有在绝对必要时才能完成)。

任何人都有想法,为什么这一个用户得到这个错误? 我特别困惑,因为只有他有这个问题。

有一点看起来有点可疑,就是你正在创build一个新的Excel实例

 Dim xlo As New Excel.Application 

通常情况下,这样做可以使用隐藏的Excel实例来打开不想显示给用户的工作簿,但是我没有看到任何代码来隐藏第二个实例,即:

 xlo.Visible = False 

由于您可以快速打开和closures共享工作簿,并且在主Excel实例中具有ScreenUpdating = False,因此您可以在主Excel实例中执行此操作,而无需创build新的Excel实例。

此外,你不叫xlo.Quitclosures第二个Excel实例,所以它可能会在后台四处闲逛…

另一种方法是使用OleDb从共享工作簿中读取,在这种情况下,您根本不需要打开它。