- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 84
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-4-8
               
|
[分享] 用程式寫程式 (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 |
|