When you have a repetitive Excel task you want to automate, you turn to Macros: a code written in VBA that can be inserted into Excel files to perform specific tasks like inserting text on a button click or performing calculations that cannot be done using in-built Excel functions. Excel for WinForms now supports OpenXMLMacro file format, with which you can save and load Macros-enabled Excel files in C1Excel. Alternately, you can also load and save such files from and to .xlsm file extension. The VBA Code is loaded in Binary format into xlsm files. If you're **saving your macro-enabled files to '.xlsm',** you don't need to specify FileFormat OpenXMLMacro to save the file. You can save the file using following code:
c1XLBook1.Save(xlsFileName);
Alternately, if you want to save macro enabled files to a stream or any other excel extension, you can save the file using:
c1XLBook1.Save(xlsFileName, FileFormat.OpenXMLMacro);
Here's an example of how C1Excel loads and saves Macro-enabled Excel file. The Macro calculates Last Day of a Month from a Date column. C1Excel loads and saves file using following code
// Copy Macro enabled Excel File
string xlsFileName = "..\\\..\\\XlsxTestBin.xlsm";
c1XLBook1.Load(xlsFileName);
c1XLBook1.Sheets[0][0, 0].Value = "It is copy!";
xlsFileName = xlsFileName.Replace(".xlsm", "Modified.xlsm");
c1XLBook1.Save(xlsFileName);
Open the Modified.xlsm and you'll find the Macros preserved. Note: C1Excel can load and save only opaque copy of Macro code. Also, C1Excel does not support any properties to add VBA code. Macros will be deleted if you save a file having macros to .xlsx/xls file.