返回列表 上一主題 發帖

[發問] Macro List

[發問] Macro List

大大好,

隨著使用VBA的量增加後,有時要找程式的所在,要花好一會兒功夫,
且同一個Module會有多個Sub 名稱
想請問能否將模組中的所有Module & Sub 名稱
依序將Module1.Sub 名稱
Module2.Sub 名稱 ....
把它全部List 在TXT or excel中 ? 方便查找程式?

本帖最後由 n7822123 於 2020-5-18 21:02 編輯

回復 1# PJChen


了解VBE架構就不難寫........基本上你應該只想要用而已

所以我不多做解釋,想了解請按 "F1"
  1. Sub 找巨集名稱()

  2. Application.DisplayAlerts = False

  3. [A1] = "活頁簿名稱"
  4. [B1] = "模組名稱"
  5. [C1] = "程序名稱"

  6. R = 2
  7. For Each wb In Workbooks
  8.   For Each VBC In wb.VBProject.VBComponents
  9.     Select Case VBC.Type
  10.       Case 1  '1=一般模組
  11.         LS = VBC.CodeModule.CountOfLines
  12.         'Debug.Print LS
  13.         LineStr = VBC.CodeModule.Lines(1, LS)
  14.         Lines = Split(LineStr, vbCrLf)
  15.         For Each Line In Lines
  16.             If Line Like "Sub*" Then
  17.               Cells(R, 1) = wb.Name
  18.               Cells(R, 2) = VBC.Name
  19.               Cells(R, 3) = Line
  20.               R = R + 1
  21.             End If
  22.         Next 'Line
  23.       Case Else
  24.     End Select
  25.   Next  'VBC
  26. Next 'wb

  27. Columns.AutoFit

  28. End Sub
複製代碼
找巨集名稱.rar (12.46 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 quickfixer 於 2020-4-18 00:14 編輯

回復 5# PJChen


網址內的microsoft連結不是有說明?需先設定引用項目
Microsoft Visual Basic for Applications Extensibility 5.3
打勾
   




第一個code 裡面也有說明要引用


不然把第一個code裡面的這2行
On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromGuid _
    "{0002E157-0000-0000-C000-000000000046}", 5, 3
加到第二個code裡面最前面,可以改成用程式碼自動引用

TOP

回復 4# 准提部林
回復 3# quickfixer
二位好,
我把程式抓下來想測試,但卡住了,可以幫我看看嗎?
20200417.223301.jpg
  1. Sub Command1_Click()
  2.     ' Declare variables to access the Excel workbook.
  3.     Dim objXLApp As Excel.Application
  4.     Dim objXLWorkbooks As Excel.Workbooks
  5.     Dim objXLABC As Excel.Workbook

  6.     ' Declare variables to access the macros in the workbook.
  7.     Dim objProject As VBIDE.VBProject
  8.     Dim objComponent As VBIDE.VBComponent
  9.     Dim objCode As VBIDE.CodeModule

  10.     ' Declare other miscellaneous variables.
  11.     Dim iLine As Integer
  12.     Dim sProcName As String
  13.     Dim pk As vbext_ProcKind

  14.     ' Open Excel, and open the workbook.
  15.     Set objXLApp = New Excel.Application
  16.     Set objXLWorkbooks = objXLApp.Workbooks   
  17.     Set objXLABC = objXLWorkbooks.Open("C:\ABC.XLS")

  18.     ' Empty the list box.
  19.     List1.Clear

  20.     ' Get the project details in the workbook.
  21.     Set objProject = objXLABC.VBProject

  22.     ' Iterate through each component in the project.
  23.     For Each objComponent In objProject.VBComponents

  24.         ' Find the code module for the project.
  25.         Set objCode = objComponent.CodeModule

  26.         ' Scan through the code module, looking for procedures.
  27.         iLine = 1
  28.         Do While iLine < objCode.CountOfLines
  29.             sProcName = objCode.ProcOfLine(iLine, pk)
  30.             If sProcName <> "" Then
  31.                 ' Found a procedure. Display its details, and then skip
  32.                 ' to the end of the procedure.
  33.                 List1.AddItem objComponent.Name & vbTab & sProcName
  34.                 iLine = iLine + objCode.ProcCountLines(sProcName, pk)
  35.             Else
  36.                 ' This line has no procedure, so go to the next line.
  37.                 iLine = iLine + 1
  38.             End If
  39.         Loop
  40.         Set objCode = Nothing
  41.         Set objComponent = Nothing
  42.     Next

  43.     Set objProject = Nothing

  44.     ' Clean up and exit.
  45.     objXLABC.Close
  46.     objXLApp.Quit
  47. End Sub
複製代碼

TOP

TOP

回復 1# PJChen

這個列出其它檔案的 macro name 含 module name
https://superuser.com/questions/1365898/macro-vba-code-to-list-and-print-names-and-code-of-all-macros-in-a-workbook
要userform、commandbutton、listbox
其中 objXLABC.Close 要改成objXLABC.Close False,不然程式會卡住
excel 2016可正常執行

TOP

回復 1# PJChen

隨便google就有一堆現成的解答了,這個列出活頁薄中所有的macro name
http://www.vbaexpress.com/kb/getarticle.php?kb_id=398
excel 2016可正常執行

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題