在您明確表示之前:Application.DisplayAlerts = False
尚未解決我的問題。Excel正在等待另一個應用程序來完成OLE操作
我寫了一個VBA過程(在Excel 2010中啓動),它圍繞包含不同Excel文件的數組進行循環。循環打開文件,刷新數據,保存並關閉數組中每個項目的文件。我寫了一個錯誤catch子例程,以便記錄哪些excel文件無法打開/刷新/保存等,以便用戶可以手動檢查它們。
有些文件非常大,涉及大量的數據在網絡上移動;有時我會得到一個對話框:Excel正在等待另一個應用程序完成OLE動作。
我可以使用Application.DisplayAlerts = False
來禁用該消息,但這可能會禁用所有警報,因此我無法捕獲錯誤?
此外,我使用該行進行了測試,並且不會停止彈出對話框。如果我按回車進行,但幾分鐘後可能會再次彈出。
有沒有一種方法可以停止消息而不停止其他警報?
注意:我的進程有一個Excel的控制實例,它運行VBA並打開要在單獨實例中刷新的工作簿。
感謝您的幫助
我的代碼摘錄低於包含刷新元素
Sub Refresh_BoardPivots_Standard()
' On Error GoTo Errorhandler
Dim i
Dim errorText As String
Dim x
Dim objXL As Excel.Application
Set objXL = CreateObject("Excel.Application")
GetPivotsToRefresh ' populate array from SQL
For Each i In StandardBoardPiv
DoEvents
'If File_Exists(i) Then
If isFileOpen(i) = True Then
errorText = i
Failed(failedIndex) = errorText
failedIndex = failedIndex + 1
Else
objXL.Visible = True 'False
objXL.Workbooks.Open FileName:=i
If objXL.ActiveWorkbook.ReadOnly = False Then
BackgroundQuery = False
Application.DisplayAlerts = False
objXL.ActiveWorkbook.RefreshAll
objXL.Application.CalculateFull
objXL.Application.DisplayAlerts = False
objXL.ActiveWorkbook.Save
objXL.Application.DisplayAlerts = True
objXL.Quit
Else
errorText = i
Failed(failedIndex) = errorText
failedIndex = failedIndex + 1
objXL.Application.DisplayAlerts = False
objXL.Quit
Application.DisplayAlerts = True
End If
End If
' Else
' errorText = i
' Failed(failedIndex) = errorText
' failedIndex = failedIndex + 1
' End If
DoEvents
If Ref = False Then
Exit For
End If
Next i
Exit Sub
'Errorhandler:
'
'errorText = i
'Failed(failedIndex) = errorText
'failedIndex = failedIndex + 1
'Resume Next
End Sub
爲什麼downvote,有什麼不對?如果有問題,我可以修復它 – SliderSteve 2014-09-05 13:36:54
我給你+1,因爲我沒有看到你的問題有任何問題。 :P問你:你爲什麼要創建另一個Excel實例?這不是不必要的併發症嗎? – 2014-09-05 20:02:11
謝謝n8。是的,我必須添加第二個實例來解決我的中斷子例程的問題。用戶需要點擊按鈕,如果他們需要安全地停止該過程,但重點在於刷新工作簿,因此按鈕無法訪問,因此是單獨的實例。 – SliderSteve 2014-09-07 01:05:21