C# を使用して、フォルダー内の多数の Excel ファイルを処理して条件付き書式を追加し、ページ レイアウトと印刷設定を調整し、改ページを調整するマクロを追加する Windows サービスを開発しました。私が抱えている問題は、Workbook_Open ルーチンの ThisWorkbook オブジェクトにコード行を追加して、ファイルが開かれたときにマクロを自動的に実行しようとしていることです。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は、コードの前半でインスタンス化されたワークブック オブジェクトです。これはすべて機能しますが、ワークブック内の ThisWorkbook オブジェクトを表しているもの (存在する場合) とそれにコードを追加する方法を決定する vbext_ComponentType 列挙に関する多くのドキュメントを見つけることができないようです。また、Excel ドキュメント内のマクロと同じように改ページを行う C# コードを見つけることができれば幸いです。残りの処理のように C# で行っていない唯一の理由は、それを機能させることができなかったからです。そこにあるどんな助けも同様に役に立ちます。