Вставить макрос не в модуль, а в лист Excel, используя взаимодействие Excel, используя c# - PullRequest
0 голосов
/ 15 апреля 2020

Нужно вставить код VBA не в модуле, а в списке листов

У меня сейчас в первом методе:

public static void CreateNewExcelFile() 
{ 
    Microsoft.Vbe.Interop.VBComponent xlMod; 
    Excel.Application app = new Excel.Application(); 
    Excel.Workbook workbook = app.Workbooks.Add(); 
    Excel.Worksheet worksheet = workbook.Worksheets[1]; 
    worksheet.Name = "worksheet_table"
    xlMod = workbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);
    xlMod.Name = "ModuleBasic";
    InsertionMacroVBAinFile.InsertMacroInExcel(app, xlMod);
    SaveExcelFile.SaveNewExcelFile(app, workbook, worksheet, xlMod);

}

И во втором методе:

public static void InsertMacroInExcel(Microsoft.Office.Interop.Excel.Application app, Microsoft.Vbe.Interop.VBComponent xlMod)
    {
       string macroCode =
        "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As 
         Boolean)\r\n" +
        " If Target.Column = 2 Then MsgBox "Ok" \r\n" +
        "End Sub";
        xlMod.CodeModule.AddFromString(macroCode);
    }

Третий способ сохранения

public static void SaveNewExcelFile(Excel.Application app, Workbook workbook, Excel.Worksheet worksheet, Microsoft.Vbe.Interop.VBComponent xlMod)
        {
            string pathToJson = @"D:\Images\";
            string result = "report_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsm";
            FileInfo fullPath = new FileInfo(pathToJson + result);

            try
            {
                workbook.SaveAs(fullPath, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled,
                null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, false, false, null, null, null);
            }
            catch (Exception)
            {}
            }
            workbook.Close();
            app.Quit();
        }

, но это вставляет в модуль, а не в лист

Помогите мне, пожалуйста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...