5

Background: I have an extensive set of specialized VBA macros used in Word for document formatting purposes. In Word 2003, these macros were activated from a customized toolbar. I have recently transitioned to Word 2007 and would like to be able to run these existing VBA macros from a new Word Ribbon created with VS 2010. I have created a Ribbon; however, I cannot figure out how to call the existing macros from the new Ribbon buttons.

Question: How do I call the existing VBA macros, which are stored in a .dotm template, from the C# Word Add-in?

Any help would be greatly appreciated.

BlueDevil
  • 193
  • 1
  • 2
  • 6

1 Answers1

6

The technique described in MS KB article 306683 -- in particular, function RunMacro defined there -- should allow you to call a VBA macro from within C# code: You define a function RunMacro

private void RunMacro(object oApp, object[] oRunArgs)
{
    oApp.GetType().InvokeMember("Run",
        System.Reflection.BindingFlags.Default |
        System.Reflection.BindingFlags.InvokeMethod,
        null, oApp, oRunArgs);
}

and then call your macro like this:

RunMacro(oApp, new object[] {"NameOfMyMacro"})

or

RunMacro(oApp, new object[] {"NameOfMyMacro", "some", 3, "parameters"})

oApp is the Word.Application object, which I'm sure is available somewhere in a Word add-in.

Denys Wessels
  • 16,829
  • 14
  • 80
  • 120
Heinzi
  • 167,459
  • 57
  • 363
  • 519
  • If i used this code in excel template it wil generate macro security warning...How can i supress this? – Smack Mar 08 '11 at 08:31
  • @Smack: http://office.microsoft.com/en-us/excel-help/change-macro-security-settings-in-excel-HP010096919.aspx – Heinzi Mar 08 '11 at 08:35