乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 85|回复: 5

返回当前代码模块名称

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-10-6 13:19:55 | 显示全部楼层 |阅读模式
我有一些现有的错误记录代码,可以写入。遇到错误时的日期、时间和错误描述的日志文件。我想添加的一件事(不硬编码)是触发错误消息的代码mod的名称。
例如,如果在CommandButton1_Click事件中发生错误,我希望代码自动神奇地“知道”错误发生在哪里。我假设我需要添加VBA Extenity的引用,但从那里我有NO IDEA走哪条路。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2006-10-6 14:35:28 | 显示全部楼层
听起来您需要的是GetModuleFileName
API指南(可从www.allapi.net免费获得)有一个示例,说明如何使用VB(a)中的GetModuleFileName和许多其他WIN32 API函数
AllAPI还提供了一个名为ApiViewer的便捷程序,可供免费下载。它将为您创建函数、常量和类型声明,并将它们放在剪贴板上,这样您就可以将它们粘贴到应用程序中。
回复

使用道具 举报

0

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
12
发表于 2006-10-6 14:37:52 | 显示全部楼层
嗯。转念一想,我想我误解了你的问题。
回复

使用道具 举报

0

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
8
发表于 2006-10-6 15:16:14 | 显示全部楼层
嗯....是的。。。。
不完全
是我想要的。
以下是我现在在一些Access DB新闻组上找到
的代码:
  1. Sub WhatProcs()
  2.     Dim oProj As VBProject
  3.     Dim oComp As VBComponent
  4.     Dim oMod As CodeModule
  5.     Dim nLine As Long
  6.     Dim strProcName As String
  7.    
  8.     Set oProj = ThisDrawing.Application.VBE.ActiveVBProject
  9.    
  10.     For Each oComp In oProj.VBComponents
  11.         ' Confusingly, each oComp corresponds to a "Module"
  12.         ' as shown in the Project Explorer. Then oMod
  13.         ' represents the code itself, which has no name.
  14.         Set oMod = oComp.CodeModule
  15.         Debug.Print oComp.Name
  16.         
  17.         ' Step past the declarations at the top
  18.         nLine = oMod.CountOfDeclarationLines + 1
  19.         
  20.         Do While nLine < oMod.CountOfLines
  21.             ' Get the name of the procedure enclosing the line
  22.             strProcName = oMod.ProcOfLine(nLine, vbext_pk_Proc)
  23.             Debug.Print vbTab & strProcName
  24.             
  25.             ' Add this procedure's line count to the current line
  26.             ' to find the next procedure (or the end of the module)
  27.             nLine = nLine + oMod.ProcCountLines(strProcName, vbext_pk_Proc)
  28.         Loop
  29.     Next oComp
  30.    
  31.     Set oMod = Nothing
  32.     Set oComp = Nothing
  33.     Set oProj = Nothing
  34. End Sub
  35. Public Sub Test1()
  36.     MsgBox "This is a test"
  37. End Sub
  38. Public Sub Test2()
  39.     MsgBox "This is also test"
  40. End Sub

以前的代码在放入新的DVB时,会吐出以下内容:
  1. ThisDrawing
  2. Module1
  3.     WhatProcs
  4.     Test1
  5.     Test2

我希望它只吐出WhatProcs,因为这是运行代码的过程。 如果我从Test1子中运行了一些代码,我希望它返回Test1(上帝,我希望这有意义,因为我不确定我是否可以再遵循它)。
回想起来,也许“模块”这个词用错了。 可能应该使用“程序”??相反?? 我不知道。。。我精疲力竭。 不能直截了当地思考。 咖啡因没有帮助。 激励 f-a-d-i-n-g 快速。
回复

使用道具 举报

0

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2006-10-7 11:39:36 | 显示全部楼层
试试这个,它要求你对每个潜艇进行错误控制,这根本不是问题。
Randall Rath编写了一个自动错误处理程序函数,可以为您编写行,非常好。
  1. Sub ActiveCode()
  2.     Dim oIDE As VBE
  3.     Dim oPane As CodePane
  4.     Dim oMod As CodeModule
  5.     Dim sProc As String
  6.     Dim lngSC As Long 'Start column
  7.     Dim lngEC As Long 'End Column
  8.     Dim lngSL As Long 'Start Line
  9.     Dim lngEL As Long 'End Line
  10.     Dim sActiveProject As String
  11.     Dim sActModule As String
  12.     Set oIDE = Application.VBE
  13.     sActiveProject = oIDE.ActiveVBProject.Name
  14.     Set oPane = oIDE.ActiveCodePane
  15.     Set oMod = oPane.CodeModule
  16.     sActModule = oPane.CodeModule.Name
  17.     oPane.GetSelection lngSL, lngSC, lngEL, lngEC
  18.     sProc = oMod.ProcOfLine(lngSL, vbext_pk_Proc)
  19.     Debug.Print sActiveProject, sActModule, sProc
  20.     Debug.Print Err.Number, Err.Description
  21.    
  22. End Sub

在另一个模块中,我放置了测试
  1. Sub errTest()
  2.     On Error GoTo Err_Control
  3.     Dim v As Integer
  4.     v = 1E+43
  5.     Debug.Print v
  6. Exit_Here:
  7.     Exit Sub
  8. Err_Control:
  9.     Select Case Err.Number
  10.     'Add your Case selections here
  11.         Case Else
  12.         
  13.         ActiveCode
  14.         Err.Clear
  15.         Resume Exit_Here
  16.     End Select
  17. End Sub

回复

使用道具 举报

0

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
11
发表于 2006-10-13 10:09:58 | 显示全部楼层
谢谢。。当我有空闲的几分钟时,我会检查出来。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 21:09 , Processed in 0.767759 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表