Excel est en attente pour une autre application pour effectuer une action OLE
Avant de vous rendre à l'évidence: Application.DisplayAlerts = False
n'a pas résolu mon problème.
J'ai écrit une procédure VBA (initié dans Excel 2010) qui boucle autour d'un tableau contenant les différents fichiers Excel. La boucle ouvre le fichier, actualise les données, enregistre et ferme le fichier pour chaque élément d'un tableau. J'ai écrit une erreur de capture de la sous routine donc je journal de laquelle les fichiers excel n'ont pas réussi à ouvrir/actualiser/save etc de sorte qu'un utilisateur peut vérifier manuellement.
Certains fichiers sont assez volumineux et impliquent une grande quantité de données qui transitent sur le réseau; parfois, je reçois une boîte de dialogue avec: Excel est en attente pour une autre application pour effectuer une action OLE.
Je pourrais utiliser Application.DisplayAlerts = False
pour désactiver le message, mais ce ne serait probablement désactiver toutes les alertes donc je ne pouvais pas rattraper les erreurs?
En outre, j'ai testé à l'aide de la ligne et il ne s'arrête pas la boîte de dialogue pop-up. Si j'appuie sur entrer il porte sur mais sera susceptible de pop-up à nouveau quelques minutes plus tard.
Est-il un moyen de les arrêter est de message sans arrêt d'autres alertes?
NB. Mon processus est une instance de contrôle d'Excel qui gère le VBA et ouvre les classeurs à être actualisé dans une instance distincte.
Merci pour votre aide
Un extrait de mon code est ci-dessous qui contient l'actualisation des éléments
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
Je vous ai donné un +1 parce que je ne vois rien de mal avec votre question. 😛 Question pour vous: pourquoi êtes-vous en train de créer une autre instance d'Excel? N'est-ce pas une complication inutile?
Grâce n8. Ouais j'ai dû ajouter de la 2ème instance à résoudre un problème avec ma rupture de sous-routine. L'utilisateur doit cliquer sur un bouton si ils ont besoin pour arrêter le processus en toute sécurité, mais l'accent a été en restant avec le rafraîchissant classeur de sorte que le bouton n'est pas accessible, d'où le séparer de l'instance.
Avez-vous vu cela? answers.microsoft.com/en-us/office/forum/office_2010-excel/...
Merci pour le lien, je l'ai essayé. Je n'ai pas eu de message d'erreur mais il a juste accroché jusqu'à ce que j'ai eu de crash. Un de mes amis pense qu'il pourrait être l'ordre de mon écran d'alerte états, va donner un aller. Cheers
OriginalL'auteur SliderSteve | 2014-09-05
Vous devez vous connecter pour publier un commentaire.
"En attente d'une autre application pour effectuer une action OLE" n'est pas un message d'alerte vous pouvez tout simplement désactiver et d'oublier, parfois, la macro sera en mesure de continuer après, mais dans mon expérience, si vous obtenez cette erreur de son seulement une question de temps jusqu'à ce que le problème se bloque/gèle l'ensemble de votre macro, donc il devrait certainement être dépannés et corrigée.
Je ne obtenir ce message d'erreur quand je suis à l'aide d'autres Applications Microsoft Office (autres que les Excel qui exécute le code) comme des objets, et l'un d'eux a une erreur - le Excel en cours d'exécution le code ne sait pas qu'une erreur s'est produite dans l'une des autres applications de sorte qu'il attend et attend et attend et finalement vous obtenez le "en Attente d'une autre application pour effectuer une action OLE" message...
Donc, pour résoudre ce genre de problème vous avez à regarder pour les endroits où vous utilisez d'autres MSO des applications... Dans votre exemple, vous avez une autre instance d'Excel et vous tirez des données provenant de l'Accès, de sorte que son plus probablement de l'un de ces deux qui est à l'origine du problème...
Ci-dessous comment je re-écrire ce code, d'être plus prudent avec le code interagit avec les autres MSO apps, explicitement le contrôle de ce qui se passe en eux.. La seule pièce que je ne pouvais pas vraiment faire beaucoup est
GetPivotsToRefresh
parce que je ne peux pas voir exactement ce que vous faites ici, mais dans mon code, je l'ai simplement supposé qu'il n'a pas retourné un tableau avec une liste de fichiers excel que vous souhaitez mettre à jour. Voir le code ci-dessous:J'ai donc créé mon propre "refreshPivotTables", mais vous pourriez avoir intégré que dans le maître de sous, j'ai juste pensé que les boucles et les compteurs de boucles peut-être obtenir un peu désordonné à ce point...
Espère que cette aide,
TheSilkCode
OriginalL'auteur TheSilkCode