2008-10-07 12 views
2

Je rafraîchis les connexions de données Excel 2007 via un programme C# et OLE. La plupart du travail est effectué par une seule instruction Workbooks.RefreshAll().Automatisation Excel via OLE - Suppression/récupération des erreurs de boîte de dialogue?

De même que la nature des feuilles de calcul rafraîchissantes, diverses choses peuvent mal tourner. Pendant le processus d'actualisation, le programme peut donner des messages d'erreur de boîte de dialogue à propos de "Les données ne peuvent pas être lues à partir du fichier '|" ", et un message à propos de" Rapports à pivots superposés ". Les deux sont fatales, et je devrais être capable d'attraper ces erreurs, et quitter mon programme avec une erreur.

Malheureusement, je ne semble pas être en mesure d'attraper ces problèmes, et à la place, mon programme automatisé se trouve jusqu'à ce que je viens et appuyez sur Entrée dans la boîte de dialogue.

Est-ce que quelqu'un sait s'il est possible d'attraper par programme les erreurs affichées dans les boîtes de dialogue Excel, au lieu de les afficher à l'utilisateur?

Répondre

9

Votre meilleur pari est de définir la propriété Application.DisplayAlerts sur False. Autrement dit, en supposant que votre variable d'objet Excel.Application est nommé « xlApp », tout ce que vous auriez à faire est la suivante:

xlApp.DisplayAlerts = false; 

Notez que cela provoquera la réponse par défaut à prendre pour chaque boîte de dialogue , ce qui est normalement ce que vous voulez. Quitter DisplayAlerts = True et utiliser SendKeys peut être votre seule autre option, mais serait moche et très sujet aux erreurs.)

Comme vous passez cet appel via OLE Automation, cet appel est croisé. -process, et, par conséquent, le paramètre DisplayAlerts persistera jusqu'à ce que vous le changiez. (S'il est appelé in-process, via VBA, il revient automatiquement à true lorsque la routine est terminée.Le même comportement s'applique probablement à un complément VB.NET ou C# appelé via un contrôle CommandBar ou Ribbon, mais il faudrait pour tester pour être certain.)

+0

+ 1- est une réponse utile –

+1

Cela fonctionne bien pour les boîtes de dialogue standard Excel, mais ne fonctionne pas pour la boîte d'erreur VBA End/Debug –

Questions connexes