Board logo

標題: [分享] 用程式寫程式 (VBProject / VBComponents) [打印本頁]

作者: Hsieh    時間: 2011-2-22 21:12     標題: 用程式寫程式 (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
作者: HUNGCHILIN    時間: 2011-2-25 00:36

富哥
最近比較忙
您這則可否研究測試一下
VBP鎖定下可否新增匯出刪除模組
作者: ssj    時間: 2011-2-26 22:44

真是不錯的教學,好好的來研究看看。
作者: homeman    時間: 2011-3-4 01:29

^^ 還沒有想到可以這麼做...真的不錯
作者: Scott090    時間: 2015-2-5 19:55

回復 1# Hsieh


    請問超版
是否能在自己的 module 取得 自己的VBProject 的 密碼? 假設密碼是 "1234"?
或者說, 原來的密碼是 "1234" 而被破解了, module內的程式碼能偵測已被改

謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)