2010-11-11 17 views
2

en studio visuel Je crée un Addin, dans le addin_startup Je suis en train une application Outlook pourle code d'appel d'Outlook VBA de C#

app = (Microsoft.Office.Interop.Outlook.ApplicationClass)(Marshal.GetActiveObject("Outlook.Application")); 

alors je fais appel une fonction ExécuterMacro que je suis arrivé de msdn

private void RunMacro(object oApp, object[] oRunArgs) 
{ 
    try 
    { 

     oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs); 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.GetType().ToString()); 

    } 
} 

Je passe cette fonction, mon Outlook objet application et le nom de la macro à exécuter dans un tableau, comme si ...

RunMacro(app, new Object[] { "showFormDisplay" }); 

Je reçois l'exception suivante

Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME)) 

Répondre

1

Je ne sais pas pourquoi vous avez votre question précise, je suppose un ou plusieurs paramètres est incorrect, mais pas sûr que je ne l'ai jamais fait la façon dont vous êtes essayer de le faire.

Je vous suggère de regarder l'article suivant pour un échantillon complet en utilisant le code quelque peu différent, que vous pourriez être en mesure de réutiliser dans votre code: HOW TO: Run Office Macros by Using Automation from Visual C# .NET

+0

merci beaucoup pour l'aide La question ici est que les fonctions utilisées dans l'exemple ne semblent pas être disponibles pour les objets Outlook, ils semblent être sur mesure pour le mot, l'accès Excel .... (ther theres une très bonne chance je me trompe ) – tom

+0

plus idées, le lien que vous avez fourni ne fonctionnera pas lors de l'utilisation de l'accès:/ – tom

+1

@ Tom: Je ne ai pas peur, j'ai simplement automatisé Excel et Word, je n'ai pas essayé beaucoup d'autres applications Office. –

0

Je vous Thik faites bien, mais peut-être vous ne répond pas aux exigences de sécurité! Pour exécuter une macro, le fichier office doit être une source fiable! Il doit être marqué via Office Security Center, sinon vous ne pourrez pas exécuter de macros. Vous devez également autoriser l'accès à l'objet VBA via le centre de sécurité pour qu'une application externe puisse appeler les macros!

0

J'ai rencontré le même problème, l'article de Microsoft (COMMENT FAIRE: Exécuter des macros Office à l'aide de Automation de Visual C#) n'aide pas car il ne couvre que les macros Outlook de Word, Excel et Access.

Maintenant j'ai enfin trouvé la solution sur un site français! Il couvre l'envoi de Python mais fonctionne aussi avec C#! French Python code: http://www.developpez.net/forums/d1239845/autres-langages/python-zope/bibliotheques-tierces/pywin32-appeler-macro-outlook/

Je l'ai porté C# avec la fonction que je dois (où "FnSendMailSafe" est le nom de la macro dans Outlook 2007.

using Outlook = Microsoft.Office.Interop.Outlook; 
object oMissing = System.Reflection.Missing.Value; 

// create outlook object 
Outlook.Application otApp = new Outlook.Application(); 

string[] arFunctionParameters = 
      { 
       sTo, 
       sCC, 
       sBCC, 
       sSubject, 
       sBody 
      }; 

// Run the macro 
otApp.GetType().InvokeMember("FnSendMailSafe", 
      System.Reflection.BindingFlags.Default | 
      System.Reflection.BindingFlags.InvokeMethod, 
      null, otApp, arFunctionParameters); 

System.Runtime.InteropServices.Marshal.ReleaseComObject (otApp); 
otApp = null; 

GC.Collect(); //Garbage collection. 

Amusez-vous!