1) Вот код, я использую, который работает для Excel с помощью .Net ссылочный: Microsoft.Office.Interop.Excel V14 (не ActiveX COM Reference):
using System;
using Microsoft.Office.Interop.Excel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
RunVBATest();
}
public static void RunVBATest()
{
Application oExcel = new Application();
oExcel.Visible = true;
Workbooks oBooks = oExcel.Workbooks;
_Workbook oBook = oBooks.Open("C:\\temp\\Book1.xlsm");
// Run the macro.
RunMacro(oExcel, new Object[] { "TestMsg" });
//Run a macro with parameters
//RunMacro(oExcel, new Object[] { "ShowMsg", "Hello from C# Client", "Demo to run Excel macros from C#" });
// Quit Excel and clean up
oBook.Saved = true;
oBook.Close(false);
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
}
private static void RunMacro(object oApp, object[] oRunArgs)
{
oApp.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.Default |
System.Reflection.BindingFlags.InvokeMethod,
null, oApp, oRunArgs);
}
}
}
}
2) Убедитесь, что вы положили Макрос кода в модуле (файл Global БАС) ..
Public Sub TestMsg()
MsgBox ("Hello Stackoverflow")
End Sub
3) убедитесь, что вы включили Macro безопасности и доверия доступ к объектной модели VBA проекта:
https://msdn.microsoft.com/en-us/library/office/ee814737(v=office.14).aspx –
http://stackoverflow.com/questions/19508569/error-when-calling-excel -macro-from-c-sharp – Ralph