Tôi đang muốn liệt kê toàn bộ tên code ở tất cả các module của 1 file vào 1 trang tính được chỉ định trước
Nếu liệt kê thêm các hàm tự tạo hoặc code ở trong các trang tính thì càng hay
P/s: tôi bấm Alt +F8 thì chỉ được coi, kg được chọn tất cả & copy gì hết
Cảm ơn các bạn
Tôi đang muốn liệt kê toàn bộ tên code ở tất cả các module của 1 file vào 1 trang tính được chỉ định trước
Nếu liệt kê thêm các hàm tự tạo hoặc code ở trong các trang tính thì càng hay
P/s: tôi bấm Alt +F8 thì chỉ được coi, kg được chọn tất cả & copy gì hết
Cảm ơn các bạn
Tôi đang muốn liệt kê toàn bộ tên code ở tất cả các module của 1 file vào 1 trang tính được chỉ định trước Nếu liệt kê thêm các hàm tự tạo hoặc code ở trong các trang tính thì càng hay
P/s: tôi bấm Alt +F8 thì chỉ được coi, kg được chọn tất cả & copy gì hết
Cảm ơn các bạn
Khẳng định rằng bài này làm được (dễ nữa là đằng khác)
Tuy nhiên, heo chỗ màu đỏ... nếu đã lỡ viết thì thôi ta liệt kê luôn toàn bộ tên các Sub, Function.. hiện có trong toàn bộ các sheet, các module, Class Module, các UserForms luôn cho nó sung
Ẹc... Ẹc...
Bài này cũng vui đây! Để xem các đại ca "tung hoành" thế nào
Khẳng định rằng bài này làm được (dễ nữa là đằng khác)
Tuy nhiên, heo chỗ màu đỏ... nếu đã lỡ viết thì thôi ta liệt kê luôn toàn bộ tên các Sub, Function.. hiện có trong toàn bộ các sheet, các module, Class Module, các UserForms luôn cho nó sung
Ẹc... Ẹc...
Bài này cũng vui đây! Để xem các đại ca "tung hoành" thế nào
Khẳng định rằng bài này làm được (dễ nữa là đằng khác)
Tuy nhiên, heo chỗ màu đỏ... nếu đã lỡ viết thì thôi ta liệt kê luôn toàn bộ tên các Sub, Function.. hiện có trong toàn bộ các sheet, các module, Class Module, các UserForms luôn cho nó sung
Ẹc... Ẹc...
Bài này cũng vui đây! Để xem các đại ca "tung hoành" thế nào
Khẳng định rằng bài này làm được (dễ nữa là đằng khác)
Tuy nhiên, heo chỗ màu đỏ... nếu đã lỡ viết thì thôi ta liệt kê luôn toàn bộ tên các Sub, Function.. hiện có trong toàn bộ các sheet, các module, Class Module, các UserForms luôn cho nó sung
Ẹc... Ẹc...
Bài này cũng vui đây! Để xem các đại ca "tung hoành" thế nào
Sub LietKe()
Dim DSach(), Ten As String
Dim i As Long, BD As Long, k As Long
For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
With ThisWorkbook.VBProject.VBComponents(i)
Ten = .Name 'Ten CodeName
If .Type = 2 Then Ten = "Class " & Ten 'Thuoc loai Class
If .Type = 1 Then Ten = "Module " & Ten 'Thuoc loai module
If .Type = 3 Then Ten = "Form " & Ten 'Thuoc loai Form
If .Type = 100 Then Ten = "Sheet " & Ten 'Thuoc loai Sheet
With .CodeModule
BD = .CountOfDeclarationLines + 1
Do Until BD > .CountOfLines
k = k + 1
ReDim Preserve DSach(1 To k)
DSach(k) = Ten & ": " & .ProcOfLine(BD, vbext_pk_Proc)
BD = BD + .ProcCountLines(.ProcOfLine(BD, vbext_pk_Proc), vbext_pk_Proc)
Loop
End With
End With
Next i
Sheet2.Range("A1").Resize(k, 1).Value = WorksheetFunction.Transpose(DSach)
End Sub
rồi giờ làm sao biết .ProcOfLine vừa tìm được nó là Sub hay là Function (nếu là Function thì as ?) hay là Property Get Set
rồi làm sao lấy các hàm API như là
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
rồi giờ làm sao biết .ProcOfLine vừa tìm được nó là Sub hay là Function (nếu là Function thì as ?) hay là Property Get Set
rồi làm sao lấy các hàm API như là
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Không gì là không thể! 1> Code liệt kê toàn bộ các thủ tục trong 1 module nào đó:
Mã:
Function ListProcedures(ByVal ModuleName As String)
Dim line As Long, i As Long
Dim arr()
Dim procName As String
With ActiveWorkbook.VBProject.VBComponents(ModuleName).CodeModule
line = .CountOfDeclarationLines + 1
Do Until line >= .CountOfLines
procName = .ProcOfLine(line, 0)
ReDim Preserve arr(i)
arr(i) = procName
i = i + 1
line = .ProcStartLine(procName, 0) + .ProcCountLines(procName, 0) + 1
Loop
End With
ListProcedures = arr
End Function
Áp dụng: Có thể gõ trên bảng tính hoặc áp dụng trong môi trường VBA đều được. Ví dụ:
- Liệt kê các thủ tục trong "Module1"
Mã:
=ListProcedures("Module1")
- Liệt kê các thủ tục trong "Sheet1"
Mã:
=ListProcedures("Sheet1")
* Lưu ý: Sheet1 ở đây là Sheet CodeName 2> Code liệt kê tên các Module có trong 1 Workbook nào đó:
Mã:
Function ListModules(Optional ByVal wkb As Workbook)
Dim n As Long, lCount As Long
If wkb Is Nothing Then Set wkb = ThisWorkbook
lCount = wkb.VBProject.VBComponents.Count
ReDim arr(1 To lCount)
For n = 1 To lCount
arr(n) = wkb.VBProject.VBComponents(n).Name
Next
ListModules = arr
End Function
Ví dụ áp dụng:
Mã:
Sub Main()
MsgBox Join(ListModules, vbLf)
End Sub
* Lưu ý: Nếu không chỉ ra 1 workbook cụ thể nào thì ngầm định là đang nói đến Thisworkbook
----------------------------------------
Có code liệt kê các tên Module, có code liệt kê các thủ tục trong 1 module cụ thể... Vậy tùy biến thế nào là chuyện của bạn nha
----------------------------------------
Không gì là không thể! 1> Code liệt kê toàn bộ các thủ tục trong 1 module nào đó:
Mã:
Function ListProcedures(ByVal ModuleName As String)
Dim line As Long, i As Long
Dim arr()
Dim procName As String
With ActiveWorkbook.VBProject.VBComponents(ModuleName).CodeModule
line = .CountOfDeclarationLines + 1
Do Until line >= .CountOfLines
procName = .ProcOfLine(line, 0)
ReDim Preserve arr(i)
arr(i) = procName
i = i + 1
line = .ProcStartLine(procName, 0) + .ProcCountLines(procName, 0) + 1
Loop
End With
ListProcedures = arr
End Function
Áp dụng: Có thể gõ trên bảng tính hoặc áp dụng trong môi trường VBA đều được. Ví dụ:
- Liệt kê các thủ tục trong "Module1"
Mã:
=ListProcedures("Module1")
- Liệt kê các thủ tục trong "Sheet1"
Mã:
=ListProcedures("Sheet1")
* Lưu ý: Sheet1 ở đây là Sheet CodeName 2> Code liệt kê tên các Module có trong 1 Workbook nào đó:
Mã:
Function ListModules(Optional ByVal wkb As Workbook)
Dim n As Long, lCount As Long
If wkb Is Nothing Then Set wkb = ThisWorkbook
lCount = wkb.VBProject.VBComponents.Count
ReDim arr(1 To lCount)
For n = 1 To lCount
arr(n) = wkb.VBProject.VBComponents(n).Name
Next
ListModules = arr
End Function
Ví dụ áp dụng:
Mã:
Sub Main()
MsgBox Join(ListModules, vbLf)
End Sub
* Lưu ý: Nếu không chỉ ra 1 workbook cụ thể nào thì ngầm định là đang nói đến Thisworkbook
----------------------------------------
Có code liệt kê các tên Module, có code liệt kê các thủ tục trong 1 module cụ thể... Vậy tùy biến thế nào là chuyện của bạn nha
----------------------------------------
Liên quan đến việc truy cập vào môi trường VBA ta phải check mục "Trust access to the VBA project object model" trong Excel Options (cái này tưởng bạn đã biết rồi chứ)
Mạnh lang thang trên Google tìm tài liệu viết cái Add Ins cho VBE .... vô tình tìm thấy link sau có cái Add-in hay Úp lên đây cho mọi người tham khảo và điều chỉnh bổ sung thêm https://exceltune.wordpress.com/2014/02/06/macrolister-a-popup-menu-to-access-all-vba-macros-for-starting-or-editing/...
Mạnh lang thang trên Google tìm tài liệu viết cái Add Ins cho VBE .... vô tình tìm thấy link sau có cái Add-in hay Úp lên đây cho mọi người tham khảo và điều chỉnh bổ sung thêm https://exceltune.wordpress.com/2014/02/06/macrolister-a-popup-menu-to-access-all-vba-macros-for-starting-or-editing/...