ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 722|回复: 0

[原创] 添加调试输出函数名的插件代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-11-15 18:49 | 显示全部楼层 |阅读模式
本帖最后由 boy8199 于 2021-11-16 10:45 编辑


方便 在程序运行中 在 立即窗口 看到  调用函数的 顺序.

可以做成插件,或者独立模块(需要搞一下,模块名判断)
需要引用 vb 扩展库(系统自带)  vb for applications extensiblility

vb6 addin 插件工程, 复制代码, 需要略微修改一下. 即可.
vba 的话 要改一下 VBInstance.ActiveVBProject.VBComponents  的引用.
ActiveWorkbook.VBProject.VBComponents



'==================='

  1. Function ProcKindString(ProcKind As VBIDE.vbext_ProcKind) As String
  2.       Debug.Print "--> frmAddIn : ProcKindString"                 '统一输出函数名

  3.     Select Case ProcKind
  4.         Case vbext_pk_Get
  5.             ProcKindString = "Property Get"
  6.         Case vbext_pk_Let
  7.             ProcKindString = "Property Let"
  8.         Case vbext_pk_Set
  9.             ProcKindString = "Property Set"
  10.         Case vbext_pk_Proc
  11.             ProcKindString = "Sub Or Function"
  12.         Case Else
  13.             ProcKindString = "Unknown Type: " & CStr(ProcKind)
  14.     End Select
  15. End Function

  16. Private Sub cmdCommand1_Click()
  17.       Debug.Print "--> frmAddIn : cmdCommand1_Click"                 '统一输出函数名
  18.     Dim i As Long: Dim j As Long: Dim k As Long
  19.     Dim VBCs As VBComponents
  20.     Dim cm As CodeModule
  21.     Dim ProcName As String
  22.     Dim ProcKind As VBIDE.vbext_ProcKind
  23.     Dim pbl As Long: Dim tempStr As String: Dim pbl1 As Long     'pbl1 函数身体+1行
  24.   
  25.     txtText1.Text = ""
  26.   
  27.     Set VBCs = VBInstance.ActiveVBProject.VBComponents
  28.    
  29.    
  30.     For i = 1 To VBCs.Count
  31.       
  32.       Set cm = VBCs(i).CodeModule
  33.       txtText1.Text = txtText1.Text & VBCs(i).Type & ":" & VBCs(i).Name & "--------" & vbCrLf
  34.    
  35.      j = 0
  36.       With cm
  37.           j = .CountOfDeclarationLines + 1
  38.           Do Until j >= .CountOfLines
  39.               ProcName = .ProcOfLine(j, ProcKind)
  40.               
  41.               pbl = .ProcBodyLine(ProcName, ProcKind)
  42.               txtText1 = txtText1 & ProcName & " | " & ProcKindString(ProcKind) & " | " _
  43.                         & pbl & vbCrLf
  44.                                  
  45.               j = .ProcStartLine(ProcName, ProcKind) + .ProcCountLines(ProcName, ProcKind)
  46.             
  47.                 For k = pbl To j
  48.                    tempStr = .Lines(k, 1)
  49.                    If Right(tempStr, 1) <> "_" Then
  50.                         pbl1 = k + 1
  51.                         Exit For
  52.                    End If
  53.                 Next
  54.                
  55.                 For k = pbl1 To j
  56.                     tempStr = Trim(.Lines(k, 1))
  57.                     
  58.                     If Len(tempStr) > 0 Then
  59.                         If (Left(tempStr, 11) = "Debug.Print") And (Right(tempStr, 8) = "'统一输出函数名") Then
  60.                            
  61.                             Call cm.DeleteLines(k, 1)
  62.                             k = k - 1
  63.                             j = j - 1
  64.                         End If
  65.                     End If

  66.                 Next
  67.                
  68.                 Call cm.InsertLines(pbl1, "      " & "Debug.Print """ & "--> " _
  69.                         & VBCs(i).Name & " : " & ProcName & """                 '统一输出函数名")
  70.                               
  71.             j = .ProcStartLine(ProcName, ProcKind) + .ProcCountLines(ProcName, ProcKind) + 1
  72.           Loop
  73.       End With
  74.      txtText1.Text = txtText1.Text & vbCrLf
  75.      
  76.     Next
  77. End Sub

复制代码







'==========='

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-4 23:37 , Processed in 0.021803 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表