VBA:如何使VBE中的当前光标跳转到最后发生错误的那一行?

这仍然与我以前的问题, VBA:如何显示一个错误消息就像标准的错误消息,它有一个“debugging”button?

现在,我成功地使VBE中的当前光标跳转到VBE中的特定过程。 我使用Application.Goto来实现这一点。 但是,我真正想要的是使VBE中的当前光标跳转到最后发生错误的那一行。 我怀疑Application.VBE对象中应该有一些有用的用途,但不知道哪一个?

解决这个问题也意味着完全满足我以前的问题。 任何提示,甚至肮脏的窍门?

继续你以前的问题:)

我想你已经在使用行号(如前面的问题所回答的那样)。

所以,修改你的error handling例程如下所示:

 Sub aa() Dim zz As Long 10: On Error GoTo ErrorHandler 20: DivisionByZero = 1 / 0 30: Exit Sub ErrorHandler: 41: If Err.Number <> 0 Then 42: Msg = "Error # " & Str(Err.Number) & " was generated by " _ & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description 43: MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext zz = CodeFind("", "", Str(Erl), 0) 44: End If 50: Resume Next End Sub 

现在CodeFind()的东西。 我发现它在这里 (在底部,最后一个),但不得不修改一下,所以我发布了很多代码…对不起。

将此代码插入到一个新的模块中,并确保您有“Microsoft Visual Basic For Applications Extensibility 5.3”的引用选中,并且该项目不受保护。 有疑问请看这里 。

HTH!

这是代码

  Option Explicit '--------------------------------------------------------------------------------------- ' Procedure : CodeFind ' DateTime : 7/5/2005 18:32 ' Author : Nelson Hochberg ' Purpose : Find a module, a procedure and/or a string in code and highlight it ' Returns : 0 if not found, line number in module if found ' Syntax : lngReturn = CodeFind ([FindMod],[FindProc],[FindStr],[TypeOfSearch]) ' Arguments : Optional FindMod As String: Part of a name of a module ' Optional FindProc As String: Part of a name of a procedure ' Optional FindStr As String: Part of a string to search ' NOTE: One of the above three is required ' Optional TypeOfSearch As Long: -1 Find line number, 0 Find string, ' >0 Continue search starting at line number: TypeOfSearch + 1 ' Thanks : To stevbe at Experts Exchange for the initial code. '--------------------------------------------------------------------------------------- ' Public Function CodeFind( _ Optional FindMod As String = "", _ Optional FindProc As String = "", _ Optional FindStr As String = "", _ Optional TypeOfSearch As Long = 0 _ ) As Long Dim vbc As VBIDE.VBComponent Dim cm As VBIDE.CodeModule Dim VBAEditor As VBIDE.VBE Dim VBProj As VBIDE.VBProject Dim startline As Long, startcol As Long, endline As Long, endcol As Long If FindMod <> "" Then CodeFind = FindModule(FindMod, vbc, cm) If CodeFind = False Then Exit Function If FindProc <> "" Then CodeFind = FindProcedure(FindProc, startline, startcol, endline, endcol, cm) If CodeFind = False Then Exit Function If FindStr <> "" Then CodeFind = FindString(FindStr, startline, startcol, endline, endcol, cm, TypeOfSearch) If CodeFind = False Then Exit Function Else GoTo CodeLineFound End If Else startline = 1 If FindStr <> "" Then CodeFind = FindString(FindStr, startline, startcol, endline, endcol, cm, TypeOfSearch) If CodeFind = False Then Exit Function Else GoTo CodeLineFound End If End If Else Set VBAEditor = Application.VBE ''''''''''''''''''''''''''''''''''''''''''' Set VBProj = VBAEditor.ActiveVBProject For Each vbc In VBProj.VBComponents Set cm = vbc.CodeModule If FindProc <> "" Then CodeFind = FindProcedure(FindProc, startline, startcol, endline, endcol, cm) If CodeFind = False Then GoTo Nextvbc2 Else Exit For Else startline = 1 If FindStr <> "" Then CodeFind = FindString(FindStr, startline, startcol, endline, endcol, cm, TypeOfSearch) If CodeFind = False Then GoTo Nextvbc2 Else Exit For Else MsgBox "CodeFind: At least one of the following is required:" & vbCrLf & _ " Module" & vbCrLf & " Procedure" & vbCrLf & " String" CodeFind = False Exit Function End If End If Nextvbc2: Next vbc If CodeFind <> False Then If FindStr <> "" Then CodeFind = FindString(FindStr, startline, startcol, endline, endcol, cm, TypeOfSearch) If CodeFind = False Then Exit Function Else GoTo CodeLineFound End If End If End If CodeLineFound: If CodeFind <> False Then If endline = -1 Then endline = 1 If endcol = -1 Then endcol = 1 cm.CodePane.Show cm.CodePane.SetSelection startline, startcol, endline, endcol End If End Function