乐筑天下

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

使用Acad处理礼仪时出错

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-10 18:16:05 | 显示全部楼层 |阅读模式
大家好,
我现在正处于一个阶段,我严重需要在我的新应用程序中考虑错误处理,我有几个问题。
1)除了通常的“esc”和un cancel和file op处理程序之外,我还应该考虑哪些其他重要的acad错误?
2)我应该把错误处理程序放在我所有的私有或“worker”子中,还是我可以把一个放在用户调用的过程中,
显然会有一些例子,将它们放在私有子中是明智的,例如打开文件等?
3)在我跳进去之前还有其他提示或技巧吗?
谢谢。

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

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

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-10 18:25:17 | 显示全部楼层

收到
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-12-10 18:40:15 | 显示全部楼层

1)将代码发布到一个新模块中(我称我的为ErrorControl)
2)添加对MICROSOFT Visual Basic for Application可扩展性5.3
3)无论何时,只要您想在子模块或函数中进行错误控制,只需使子模块处于活动状态,然后转到工具(与保持引用相同的工具下拉)->宏modulename.AutoErrorHandler
"运行"this,错误处理程序将自动编写。
  1. Option Explicit
  2. Dim objIDE As VBE
  3. Dim objPane As CodePane
  4. Dim objMod As CodeModule
  5.    
  6. 'Randall Rath
  7. Public Sub AutoErrorHandler()
  8.   Dim strProc As String
  9.   Dim lngFirst As Long
  10.   Dim lngTotal As Long
  11.   Dim lngLast As Long
  12.   On Error GoTo Err_Control
  13.   Set objIDE = Application.VBE
  14.   Set objPane = objIDE.ActiveCodePane
  15.   Set objMod = objPane.CodeModule
  16.   strProc = GetCurrentProc
  17.   lngFirst = objMod.ProcBodyLine(strProc, _
  18.   vbext_pk_Proc)
  19.   lngTotal = objMod.ProcCountLines(strProc, _
  20.   vbext_pk_Proc)
  21.   lngLast = lngFirst + lngTotal
  22.   Call InsertGoto(lngLast, lngFirst)
  23.   Call InsertHandler(lngLast, lngFirst)
  24.   Set objIDE = Nothing
  25.   Set objPane = Nothing
  26.   Set objMod = Nothing
  27. Exit_Here:
  28.   Exit Sub
  29. Err_Control:
  30.   Select Case Err.Number
  31.     Case Else
  32.     MsgBox Err.Description
  33.     Resume Exit_Here
  34.   End Select
  35. End Sub
  36. Private Function GetCurrentProc() As String
  37.   Dim lngSC As Long 'Start column
  38.   Dim lngEC As Long 'End Column
  39.   Dim lngSL As Long 'Start Line
  40.   Dim lngEL As Long 'End Line
  41.   On Error GoTo Err_Control
  42.   objPane.GetSelection lngSL, lngSC, _
  43.   lngEL, lngEC
  44.   'Debug.Print lngSL, lngEL
  45.   GetCurrentProc = objMod.ProcOfLine(lngSL, _
  46.   vbext_pk_Proc)
  47. Exit_Here:
  48.   Exit Function
  49. Err_Control:
  50.   Select Case Err.Number
  51.   'Add your Case selections here
  52.     Case Else
  53.     MsgBox Err.Description
  54.     Resume Exit_Here
  55.   End Select
  56. End Function
  57. Private Sub InsertGoto(LastLine As Long, _
  58. FirstLine As Long)
  59.   Dim lngCnt As Long
  60.   Dim strLine As String
  61.   On Error GoTo Err_Control
  62.   FirstLine = FirstLine + 1
  63.   For lngCnt = FirstLine To LastLine
  64.     If Not Right(objMod.Lines(lngCnt - 1, 1), _
  65.     1) = "_" Then
  66.       strLine = objMod.Lines(lngCnt, 1)
  67.       If InStr(1, strLine, "Dim", _
  68.       vbTextCompare) = 0 Then
  69.         objMod.InsertLines lngCnt, _
  70.         vbTab & "On Error GoTo Err_Control"
  71.         Exit For
  72.       End If
  73.     End If
  74.   Next lngCnt
  75. Exit_Here:
  76.   Exit Sub
  77. Err_Control:
  78.   Select Case Err.Number
  79.   'Add your Case selections here
  80.     Case Else
  81.     MsgBox Err.Description
  82.     Resume Exit_Here
  83.   End Select
  84. End Sub
  85. Private Sub InsertHandler(LastLine As Long, FirstLine As Long)
  86.   Dim lngCnt As Long
  87.   Dim strLine As String
  88.   On Error GoTo Err_Control
  89.   For lngCnt = LastLine To FirstLine Step -1
  90.     strLine = objMod.Lines(lngCnt, 1)
  91.     Select Case strLine
  92.     Case "End Sub"
  93.       objMod.InsertLines lngCnt, "Exit_Here:"
  94.       objMod.InsertLines lngCnt + 1, vbTab & _
  95.       "Exit Sub"
  96.       objMod.InsertLines lngCnt + 2, _
  97.       "Err_Control:"
  98.       objMod.InsertLines lngCnt + 3, vbTab & _
  99.       "Select Case Err.Number"
  100.       objMod.InsertLines lngCnt + 4, vbTab & _
  101.       "'Add your Case selections here"
  102.       objMod.InsertLines lngCnt + 5, vbTab & _
  103.       vbTab & "Case Else"
  104.       objMod.InsertLines lngCnt + 6, vbTab & _
  105.       vbTab & "MsgBox Err.Description"
  106.       objMod.InsertLines lngCnt + 7, vbTab & _
  107.       vbTab & "Err.Clear"
  108.       objMod.InsertLines lngCnt + 8, vbTab & _
  109.       vbTab & "Resume Exit_Here"
  110.       objMod.InsertLines lngCnt + 9, vbTab & _
  111.       "End Select"
  112.       Exit For
  113.     Case "End Function"
  114.       objMod.InsertLines lngCnt, "Exit_Here:"
  115.       objMod.InsertLines lngCnt + 1, vbTab & _
  116.       "Exit Function"
  117.       objMod.InsertLines lngCnt + 2, _
  118.       "Err_Control:"
  119.       objMod.InsertLines lngCnt + 3, vbTab & _
  120.       "Select Case Err.Number"
  121.       objMod.InsertLines lngCnt + 4, vbTab & _
  122.       "'Add your Case selections here"
  123.       objMod.InsertLines lngCnt + 5, vbTab & _
  124.       vbTab & "Case Else"
  125.       objMod.InsertLines lngCnt + 6, vbTab & _
  126.       vbTab & "MsgBox Err.Description"
  127.       objMod.InsertLines lngCnt + 7, vbTab & _
  128.       vbTab & "Err.Clear"
  129.       objMod.InsertLines lngCnt + 8, vbTab & _
  130.       vbTab & "Resume Exit_Here"
  131.       objMod.InsertLines lngCnt + 9, vbTab & _
  132.       "End Select"
  133.       Exit For
  134.     End Select
  135.   Next lngCnt
  136. Exit_Here:
  137.   Exit Sub
  138. Err_Control:
  139.   Select Case Err.Number
  140.     Case Else
  141.     MsgBox Err.Description
  142.     Debug.Print Err.Number & Space(2) & Err.Description
  143.     Resume Exit_Here
  144.   End Select
  145.   
  146. End Sub

这是一个示例
  1. Sub Test()
  2.     On Error GoTo Err_Control
  3. Exit_Here:
  4.     Exit Sub
  5. Err_Control:
  6.     Select Case Err.Number
  7.     'Add your Case selections here
  8.         Case Else
  9.         MsgBox Err.Description
  10.         Err.Clear
  11.         Resume Exit_Here
  12.     End Select
  13. End Sub

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-12-10 18:58:43 | 显示全部楼层
不错!我记得这方面的一些东西,但我当时非常生疏,我也认为有一些方法来编写一个“通用”的误差函数-也许就是这样??
谢谢布里科
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-12-10 19:22:23 | 显示全部楼层
我怀疑兰德尔下线或隐身,在停工一年后,我在任何地方都找不到他。
获得良好错误处理的另一种方法是安装用于VBA的M-Z工具(没有添加的免费软件),您只需单击一个按钮即可添加错误处理程序。
它也可以为属性和其他好东西编写框架。
回复

使用道具 举报

7

主题

35

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2007-12-10 21:41:22 | 显示全部楼层
非常酷。 将其添加到我的有用内容列表中。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 13:12 , Processed in 0.716482 second(s), 64 queries .

© 2020-2025 乐筑天下

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