Prima di andare per l'ovvio: Application.DisplayAlerts = False
non ha risolto il mio problema.Excel è in attesa di un'altra applicazione per completare un'azione OLE
Ho scritto una procedura VBA (avviata in Excel 2010) che scorre in un array contenente diversi file Excel. Il ciclo apre il file, aggiorna i dati, salva e chiude il file per ogni elemento dell'array. Ho scritto una routine secondaria di cattura degli errori, quindi registro quali file Excel non sono riusciti ad aprire/aggiornare/salvare ecc. In modo che un utente possa controllarli manualmente.
Alcuni file sono piuttosto grandi e comportano una grande quantità di dati che si spostano attraverso la rete; a volte viene visualizzata una finestra di dialogo con: Excel è in attesa di un'altra applicazione per completare un'azione OLE.
Potrei usare Application.DisplayAlerts = False
per disabilitare il messaggio ma questo presumibilmente disabiliterebbe tutti gli avvisi in modo da non riuscire a rilevare gli errori?
Inoltre ho provato a utilizzare la linea e non interrompe il pop-up della finestra di dialogo. Se premo invio, si attiva ma verrà visualizzato nuovamente alcuni minuti dopo.
C'è un modo per interrompere specificamente il messaggio senza interrompere altri avvisi?
NB. Il mio processo ha un'istanza di controllo di Excel che esegue VBA e apre le cartelle di lavoro da aggiornare in un'istanza separata.
Grazie per il vostro aiuto
Un estratto del mio codice è inferiore che contiene gli elementi di aggiornamento
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
Perché il downvote, cosa c'è di sbagliato? Se c'è un problema, posso sistemarlo – SliderSteve
Ti ho dato un +1 perché non vedo nulla di sbagliato nella tua domanda. : P Domanda per te: perché stai creando un'altra istanza di Excel? Non è una complicazione inutile? –
Grazie n8. Sì, ho dovuto aggiungere la seconda istanza per risolvere un problema con la mia sub-routine di interruzione. L'utente doveva fare clic su un pulsante se aveva bisogno di interrompere il processo in modo sicuro, ma l'attenzione era rimasta con la cartella di lavoro di aggiornamento in modo da non poter accedere al pulsante, quindi l'istanza separata. – SliderSteve