この例は、開いている保護されていないすべてのプロジェクトで機能します。保護されたプロジェクトを変更する必要がある場合は、まず保護を解除してください。
アドインへの変更は明示的に保存する必要があることに注意してください。
さまざまなチェックの背後にある理論的根拠については、インライン コメントを参照してください。
Sub Foo()
'Add a reference to Visual Basic for Applications Extensibility
Dim proj As VBIDE.VBProject
Dim comp As VBIDE.VBComponent
For Each proj In Application.VBE.VBProjects
'Check the project isn't protected
If proj.Protection = vbext_pp_none Then
For Each comp In proj.VBComponents
'Check we're working with a standard module
If comp.Type = vbext_ct_StdModule Then
'TODO: Check that Option Private Module doesn't already exist
comp.CodeModule.InsertLines 1, "Option Private Module"
End If
Next comp
End If
Next proj
End Sub
OP(@vityata)から編集:あなたの回答に更新された回答を追加することにしました(気にしないでください)。遅延バインディングを使用しているため、ライブラリは必要ありません。
'---------------------------------------------------------------------------------------
' Method : AddOptionPrivate
' Author : stackoverflow.com
' Date : 12.01.2017
' Purpose: Checking for "Option Private Mod~" up to line 5, if not found we add it in
' every module
'---------------------------------------------------------------------------------------
Sub AddOptionPrivate()
Const UP_TO_LINE = 5
Const PRIVATE_MODULE = "Option Private Module"
Dim objXL As Object
Dim objPro As Object
Dim objComp As Variant
Dim strText As String
Set objXL = GetObject(, "Excel.Application")
Set objPro = objXL.ActiveWorkbook.VBProject
For Each objComp In objPro.VBComponents
If objComp.Type = 1 Then
strText = objComp.CodeModule.Lines(1, UP_TO_LINE)
If InStr(1, strText, PRIVATE_MODULE) = 0 Then
objComp.CodeModule.InsertLines 2, PRIVATE_MODULE
End If
End If
Next objComp
End Sub