4. Thuộc tính của CodeModule
CodeModule Object có thể lấy được code macro được ghi trong nó. Sau đây chúng ta sẽ cùng tìm hiểu các thuộc tính thường sử dụng của CodeModule.
4.1 Thuộc tính CountOfLines và CountOfDeclarationLines
Đoạn code dưới đây sẽ lấy thông tin tổng số dòng code được ghi trong Module.
Sub Sample7()
Dim Cnt As Long
Cnt = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.CountOfLines
MsgBox Cnt
End Sub
Với Module như thế này:
Bạn cần đăng nhập để thấy đính kèm
Ta được kết quả là:
Bạn cần đăng nhập để thấy đính kèm
Thuộc tính
CountOfLines sẽ cho ta biết số dòng code trong, bao gồm cả dòng code khai báo. Và tất nhiên với những dòng code trống bằng cách gõ Enter thì dòng trống đó cũng được tính vào tổng số dòng code. Đuơng nhiên nó cũng bao gồm cả các dòng comment.
Nếu như bạn quan tâm tổng số dòng code khai báo biến, bằng thuộc tính
CountOfDeclarationLines, bạn có thể lấy được thông tin này.
Sub Sample8()
Dim CodeLine As Long, DeclarationLines As Long
With ThisWorkbook.VBProject.VBComponents("Module200313").CodeModule
DeclarationLines = .CountOfDeclarationLines
CodeLine = .CountOfLines
End With
MsgBox "So dong code khai bao bien la:" & DeclarationLines & vbCrLf & _
"So dong code cua chuong trinh la:" & CodeLine - DeclarationLines
End Sub
Bạn cần đăng nhập để thấy đính kèm
Kết quả:
Bạn cần đăng nhập để thấy đính kèm
4.2 Thuộc tính Lines
Thuộc tính này theo cấu trúc như sau:
CodeModule.
Lines(
startline,
count)
Từ dòng code
startline sẽ lấy số dòng code là
count.
Sub Sample9()
Dim Code As String
Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5)
MsgBox Code
End Sub
Bạn cần đăng nhập để thấy đính kèm
Kết quả:
Bạn cần đăng nhập để thấy đính kèm
4.3 Thuộc tính ProcBodyLine, ProcCountLines, ProcOfLine, ProcStartLine
Thuộc tính
ProcBodyLine sẽ trả về dòng đầu tiên của thủ tục (hàm) do chúng ta chỉ định.
Tham số truyền vào sẽ có 2 tham số.
CodeModule.ProcBodyLine(procname, prockind)
Tham số
procname: Chúng ta sẽ chỉ định tên thủ tục (hàm) mà chúng ta muốn tìm dòng đầu tiên của nó.
Tham số
prockind: Chúng ta sẽ chỉ định trị số kiểu chủng loại thủ tục (hàm) mà chúng ta điều tra.
Trị số | Nội dung |
---|
3 | Lấy giá trị của thuộc tính |
1 | Thiết định giá trị cho thuộc tính |
2 | Thiết định tham chiếu Object |
0 | Ngoài các trường hợp trên |
Thông thường chúng ta chỉ định lấy thông tin của Sub hay Function, thì chúng ta thiết định tham số là 0.
Sub Sample10()
Dim Cnt As Long
Cnt = ThisWorkbook.VBProject.VBComponents("Module1"). _
CodeModule.ProcBodyLine("Sample10", 0)
MsgBox Cnt
End Sub
Bạn cần đăng nhập để thấy đính kèm
Thuộc tính
ProcCountLines sẽ trả về số dòng code của thủ tục (hàm) mà chúng ta chỉ định điều tra.
Tham số chỉ định giống với tham số chỉ định cho thuộc tính
ProcBodyLine.
Thuộc tính
ProcCountLines: Từ trước dòng khai báo thủ tục hay hàm (Sub ○○ hay Function××), nó sẽ trả về tổng số dòng code cho tới khi kết thúc thủ tục hay hàm (End Sub hay End Function ), bao gồm cả dòng trống và dòng có comment.
Trong Module, ngay cả khi đã kết thúc hàm hay thủ tục, nếu ở dưới còn các dòng trống, thì các dòng này cũng tính vào kết quả tính toán ở trên.
Sub Sample11()
Dim Cnt As Long
Cnt = ThisWorkbook.VBProject.VBComponents("Module1"). _
CodeModule.ProcCountLines("Sample11", 0)
MsgBox Cnt
End Sub
Bạn cần đăng nhập để thấy đính kèm
Thuộc tính
ProcOfLine: Trả về tên tủ tục (hàm) chứa dòng code mà bạn chỉ định.
CodeModule.ProcOfLine(line, prockind)
Tham số line: Chỉ định dòng code.
Tham sốprockind: Giống với thuộc tính ProcBodyLine, chỉ định trị số kiểu chủng loại của hàm (thủ tục).
Sub Sample12()
Dim ProcName As String
ProcName = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.ProcOfLine(9, 0)
MsgBox ProcName
End Sub
Đoạn code này có nghĩa là tìm tên hàm hay thủ tục (tham số 0) chứa dòng code thứ 9 (tham số 9) của Module1.
Bạn cần đăng nhập để thấy đính kèm
Thuộc tính
ProcStartLine: Trả về dòng bắt đầu của thủ tục (hàm) mà chúng ta cần điều tra.
Tham số truyền vào giống với thuộc tính
ProcCountLines.
Sub Sample13()
Dim Cnt As Long
Cnt = ThisWorkbook.VBProject.VBComponents("Module1"). _
CodeModule.ProcStartLine("Sample13", 0)
MsgBox Cnt
End Sub
Bạn cần đăng nhập để thấy đính kèm
Dòng bắt đầu của thủ tục (hàm) khác với dòng khai báo thủ tục (hàm) (Sub ○○ hay Function××). Dòng bắt đầu của thủ tục (hàm) được xác định là dòng tiếp theo ngay sau khi phần khai báo biến kết thúc. Hoặc là dòng code tiếp theo ngay sau khi dòng kết thúc thủ tục (hàm) xuất hiện ( End Sub hay End Function ). Ở ví dụ trên, ngay trước dòng 「Sub Sample13()」là một dòng trống, và dòng này được nhìn nhận là dòng bắt đầu của thủ tục Sample13.
4.4 Ví dụ về việc lấy toàn bộ tên các thủ tục và hàm:
Đối với CodeModule Object, không có thuộc tính nào để ngay lập tức lấy được tên toàn bộ các thủ tục hay hàm mà nó chứa. Sau đây chúng ta sẽ xây dựng chương trình để lấy toàn bộ tên thủ tục (hàm) mà CodeModule chứa.
Sub Sample14()
Dim buf As String, ProcNames As String, i As Long
With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule 'Tìm trong Module1'
For i = 1 To .CountOfLines
If buf <> .ProcOfLine(i, 0) Then
buf = .ProcOfLine(i, 0)
ProcNames = ProcNames & buf & vbCrLf
End If
Next i
End With
MsgBox ProcNames
End Sub
Bạn cần đăng nhập để thấy đính kèm
Nguồn:
Bạn cần đăng nhập để thấy link