' [COLOR=#ff0000]liệt kê các hàm, sub có trong CompName (Sheet, ThisWorkBook, UserForm, Module)[/COLOR]
Function ListFunctions(ByVal book As Workbook, ByVal CompName As String)
' Microsoft Visual Basic for Applications Extensibility
' Trả về danh sách hàm có trong CompName
Dim currLine As Long, k As Long, name As String, Arr()
With book.VBProject.VBComponents(CompName).CodeModule
currLine = .CountOfDeclarationLines + 1
Do Until currLine >= .CountOfLines
ReDim Preserve Arr(0 To k)
name = .ProcOfLine(currLine, vbext_pk_Proc)
Arr(k) = name
currLine = currLine + .ProcCountLines(name, vbext_pk_Proc)
k = k + 1
Loop
End With
ListFunctions = Arr
End Function
'[COLOR=#ff0000] liệt kê các component (sheet, thisworkbook, userform, module, class module) có trong workbook[/COLOR]
Function ListComponents(ByVal book As Workbook)
' tham chieu: Microsoft Visual Basic for Applications Extensibility
Dim VBComp As VBIDE.VBComponent, Arr(), k As Long
For Each VBComp In book.VBProject.VBComponents
ReDim Preserve Arr(0 To k)
Arr(k) = VBComp.name
k = k + 1
Next VBComp
ListComponents = Arr
End Function
' [COLOR=#ff0000]xóa Module, Form, Class Module khỏi book[/COLOR]
Sub DeleteVBComponent(ByVal book As Workbook, ByVal CompName As String)
' cần có tham chiếu Microsoft Visual Basic for Applications Extensibility
' xóa vbcomponent có tên là CompName khỏi bảng tính wb
' vbcomponent là Module, Class Module, Form
' vd. DeleteVBComponent Workbooks("vbe.xls"), "class1"
' DeleteVBComponent Workbooks("vbe.xls"), "module3"
' DeleteVBComponent Workbooks("vbe.xls"), "myForm"
Dim VBCp As VBComponents
Application.DisplayAlerts = False
On Error Resume Next
Set VBCp = book.VBProject.VBComponents
If Not VBCp Is Nothing Then VBCp.Remove VBCp(CompName)
Set VBCp = Nothing
On Error GoTo 0
Application.DisplayAlerts = True
End Sub
' [COLOR=#ff0000]xóa nội dung của Module nhưng vẫn giữ Module[/COLOR]
Sub DeleteModuleContent(ByVal book As Workbook, ByVal CompName As String)
' cần có tham chiếu Microsoft Visual Basic for Applications Extensibility
' xóa nội dung (không xóa CompName) của module có tên là CompName trong bảng tính book
' vd. DeleteModuleContent Workbooks("vbe.xls"), "module3"
On Error Resume Next
With book.VBProject.VBComponents(CompName).CodeModule
.DeleteLines 1, .CountOfLines
End With
On Error GoTo 0
End Sub
' [COLOR=#ff0000]xóa code của hàm trong Module, UserForm, Sheet1, 2, 3, ThisWorkBook[/COLOR]
Sub DeleteProcedureCode(ByVal book As Workbook, _
ByVal CompName As String, ByVal ProcedureName As String)
' cần có tham chiếu Microsoft Visual Basic for Applications Extensibility
' xóa ProcedureName khỏi CompName trong bảng tính book
'vd. DeleteProcedureCode Workbooks("vbe.xls"), "module2", "tinh toan"
Dim VBCM As CodeModule, ProcStartLine As Long, ProcLineCount As Long
On Error Resume Next
' module có phương thức cần xóa
Set VBCM = book.VBProject.VBComponents(CompName).CodeModule
If Not VBCM Is Nothing Then
' tìm dòng đầu của phương thức (kể cả các dòng ghi chú ở trước Function, Sub ProcedureName)
' nếu trả về 0 thì có nghĩa là phương thức không tồn tại
ProcStartLine = VBCM.ProcStartLine(ProcedureName, vbext_pk_Proc)
If ProcStartLine > 0 Then
' tổng số dòng của phương thức
ProcLineCount = VBCM.ProcCountLines(ProcedureName, vbext_pk_Proc)
' xóa tất cả các dòng của phương thức
VBCM.DeleteLines ProcStartLine, ProcLineCount
End If
Set VBCM = Nothing
End If
On Error GoTo 0
End Sub