2012-06-27 3 views
0

폴더의 여러 Excel 파일을 처리하여 조건부 서식을 추가하고 페이지 레이아웃 및 인쇄 설정을 조정하고 매크로를 추가하여 페이지를 조정하는 C#을 사용하여 Windows 서비스를 개발했습니다 휴식. 내가 가지고있는 문제는 파일을 열 때 매크로를 자동으로 실행하려면 Workbook_Open 루틴의 ThisWorkbook 개체에 코드 줄을 추가하는 것입니다. WB 이전 코드에서 인스턴스화 통합 문서 객체가ThisWorkbook에 매크로를 추가하는 방법 C# Excel Interop를 사용하여 Workbook_Open을 엽니 다.

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

라인에서

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); 

다음과 같이 내가 Module1 위해 매크로를 추가하기 위해 사용하고 코드입니다. 그러나이 모든 작동하지만 vbext_ComponentType 열거 형에 대한 많은 설명서를 찾을 수 없어 통합 문서의 ThisWorkbook 개체를 나타내는 것이 무엇인지 판별하고 통합 문서에 ThisWorkbook 개체를 추가하는 방법을 결정합니다. 또한 Excel 문서에서 매크로로 페이지 나누기와 동일한 작업을 수행하는 C# 코드를 찾는 것이 좋을 것입니다. 처리의 나머지 부분과 같이 C#에서 수행하지 않는 유일한 이유는 작동하도록 만들 수 없다는 것입니다. 도움이된다면 도움이 될 것입니다.

답변

1
var workbookMainModule = wkBk.VBProject.VBComponents.Item("ThisWorkbook"); 
       workbookMainModule.CodeModule.AddFromString(sCode); 
+3

몇 가지 설명이 도움이 될 수 있습니다. –