2 votes

Vérifier si un classeur Excel comporte des macros en utilisant C#

Je dois parcourir des centaines de fichiers Excel pour trouver ceux qui ont des macros, en utilisant un client C#.

J'ai essayé d'utiliser le code figurant dans la réponse acceptée ici :

Utilisation d'Interop.Excel pour vérifier si un fichier Excel contient des macros VBA

Cependant, ce code ouvre d'abord le fichier. De nombreux fichiers s'ouvrent avec des messages d'erreur de Windows et de VBA, même après avoir ajouté _appExcel.DisplayAlerts = false

Il est également très lent. Existe-t-il une meilleure façon de procéder, idéalement sans ouvrir le fichier Excel au préalable ?

J'ai cherché de la documentation sur MSDN pour l'interopérabilité d'Excel ici : HasVBProject mais il n'y a pas d'exemples avec lesquels je peux travailler.

1voto

jonathana Points 2647

Si les événements du classeur sont le problème, vous pouvez désactiver toutes les macros en utilisant la fonction Interop.Excel via l'espace de nom AutomationSecurity propriété :

MyExcel.Application.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;

0voto

h2so4 Points 1501

Essayez ceci

f = Dir("*.xls*")
While f <> ""
On Error Resume Next
    Set wb = Workbooks.Open(f)
    If wb.HasVBProject Then
       Debug.Print wb.Name & " has macro"
    Else
        Debug.Print wb.Name & "does not have macro"
    End If
    wb.Close
    f = Dir
Wend

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X