Как добавить макрос в ThisWorkbook Workbook_Open с C# Excel Interop

Я разработал службу Windows с использованием C#, которая обрабатывает ряд файлов Excel в папке, чтобы добавить условное форматирование, настроить макет страницы и параметры печати, а также добавить макрос для настройки разрывов страниц. Проблема, с которой я столкнулся, заключается в попытке добавить строку кода в объект ThisWorkbook в подпрограмме Workbook_Open для автоматического запуска макроса при открытии файла. Код, который я использую для добавления макроса в Module1, выглядит следующим образом:

    using Excel = Microsoft.Office.Interop.Excel;
    using VBIDE = Microsoft.Vbe.Interop;

    VBIDE.VBComponent oModule;
    String sCode;

    oModule = wb.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);

    sCode = 
@"Sub FixPageBreaks()
    On Error GoTo ErrMsg

    Dim wb As Workbook
    Set wb = ActiveWorkbook

    Dim sheet As Worksheet
    Set sheet = wb.Worksheets(1)

    Dim vBreaks As VPageBreaks
    Set vBreaks = sheet.VPageBreaks

    If vBreaks.Count > 0 Then
        Dim lastCol As Integer
        lastCol = ActiveSheet.Cells.Find(What:=""*"", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Column

        Dim lCount As Integer
        lCount = 1

        Dim brkCol As Integer

        Dim brkRng As Range

        Dim iReply As VbMsgBoxResult

        Do
            If vBreaks(lCount).Location.Column = lastCol Then
                brkCol = vBreaks(lCount).Location.Column + 1
            Else
                brkCol = vBreaks(lCount).Location.Column - 1
            End If

            Set brkRng = Range(sheet.Cells(1, brkCol), sheet.Cells(1, brkCol))

            If brkCol Mod 2 = 1 And lastCol > brkCol Then
                Set vBreaks(lCount).Location = brkRng
            ElseIf brkCol Mod 2 = 1 Then
                vBreaks(lCount).DragOff Direction:=xlToRight, RegionIndex:=1
            End If

            lCount = lCount + 1
        Loop While lCount <= vBreaks.Count

        sheet.PrintPreview
    End If
Exit Sub
ErrMsg:
    MsgBox Err.Description
End Sub";

    oModule.CodeModule.AddFromString(sCode);

В линии

wb.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);

wb — это объект книги, созданный ранее в коде. Все это работает, однако я не могу найти много документации по перечислению vbext_ComponentType, чтобы определить, какой из них (если есть) представляет объект ThisWorkbook в книге и как добавить в него код. Я также был бы рад найти код C#, который делает то же самое с разрывами страниц, что и макрос в документе Excel. Единственная причина, по которой я не делаю это на C#, как и остальную часть обработки, заключается в том, что я не смог заставить это работать. Любая помощь там будет одинаково полезна.


person Mike    schedule 27.06.2012    source источник


Ответы (1)


person    schedule
comment
Некоторое объяснение могло бы быть полезным здесь - person Andrew Barber; 12.10.2012