gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:47:33 24 4
gpt4 key购买 nike

这还是和我之前的问题相关的,VBA: How to display an error message just like the standard error message which has a “Debug” button?

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

解决这个问题也意味着完全满足我之前的问题。有什么提示甚至肮脏的伎俩吗?

最佳答案

继续您之前的问题:)

我想您已经在使用行编号(如上一个问题中所回答)。

因此,将错误处理例程修改为:

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() 的事情。我找到了here (在底部,最后一个),但不得不稍微修改一下,所以我发布了很多代码......抱歉。

将此代码插入新模块中,并确保选中了对“Microsoft Visual Basic For Applications Extensibility 5.3”的引用,并且该项目不 protected 。有疑问请参阅here .

哈!

这是代码

 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

关于VBA:如何使VBE中当前光标跳转到最后发生错误的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com