返回列表 上一主題 發帖

[分享] 用程式寫程式 (VBProject / VBComponents)

[分享] 用程式寫程式 (VBProject / VBComponents)

作者:leonchou
一個簡單的例子:在某XLS檔加入Workbook_Open事件

Sub ggg()
Dim wb As Excel.Workbook
Set wb = GetObject("C:\test.xls")
With wb.VBProject.VBComponents("ThisWorkbook").CodeModule
 .InsertLines 1, "Private Sub Workbook_Open()"
 .InsertLines 2, "Msgbox ""This is a Test."""
 .InsertLines 3, "End Sub"
End With
wb.Close SaveChanges:=True
Set wb = Nothing
End Sub

VBComponent 是一個VBA專案中的元件,
元件可以是表單(UserForm)、模組(Module)或物件類別。
此例即是在 ThisWorkbook 模組寫入程式。

CodeModule 物件代表一個元件內的程式碼,
要寫入程式就要用到 CodeModule。
*******************************
以下程式會刪除Book2中所有程式 --

Sub ddd()
Dim vbc As Object
With Workbooks("book2.xls").VBProject
For Each vbc In .VBComponents
 Select Case vbc.Type
 Case vbext_rk_Project, vbext_wt_Browser, vbext_ct_MSForm '註
  .VBComponents.Remove .Item(vbc.Name)

 Case Else
  .VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
  .VBComponents(vbc.Name).CodeModule.CountOfLines

 End Select
Next
End With
End Sub

註:VBComponent.Type
vbext_rk_Project 模組的集合(Module) Type =1
vbext_wt_Browser 物件類別(Class1) Type =2
vbext_ct_MSForm 自訂表單(UserForm) Type =3
**********************************
刪除 Sheet1 所有的代碼:

Sub DelSheetCodes()
Dim cMdl As Object
Set cMdl = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule
n = cMdl.CountOfLines
cMdl.DeleteLines 1, n
End Sub

最後二行亦可直接寫成
cMdl.DeleteLines 1, cMdl.CountOfLines
**********************************
例如你已從另一活頁簿匯出Module2的程式碼於 C:\module2.bas
以下將 module2.bas 匯入目前workbook,
會產生一個 Module2 模組及其程式碼 --

Sub ImpCodes()
ActiveWorkbook.VBProject.VBComponents.Import "C:\module2.bas"
End Sub
學海無涯_不恥下問

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題