VBA:VBEの現在のカーソルを最後のエラーが発生した行にジャンプさせる方法は?

excel excel-vba ms-office scripting vba
VBA:VBEの現在のカーソルを最後のエラーが発生した行にジャンプさせる方法は?

これは以前の私の質問、https://stackoverflow.com/questions/3911973/vba-how-to-display-an-error-message-just-like-the-standard-error-message-which-hとまだ関連しています[VBA:「デバッグ」ボタンがある標準エラーメッセージのようにエラーメッセージを表示する方法は?]

ここで、VBEの現在のカーソルをVBEの特定の手順にジャンプさせることに成功しました。 これを実現するために「Application.Goto」を使用しました。 ただし、実際に必要なのは、VBEの現在のカーソルを最後のエラーが発生した行にジャンプさせることです。 `Application.VBE`オブジェクトにはこの目的に役立つ何かがあるはずだと思っていましたが、どれを知りませんでしたか?

これを解決することは、前の質問を完全に満たすことも意味します。 ヒントや汚いトリックさえありますか?

  3  0


ベストアンサー

前の質問から続けて:)

すでに行番号を使用していると思います(前の質問で回答したとおり)。

したがって、エラー処理ルーチンを次のように変更します。

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()について説明します。 私はそれをhttp://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_21471211.html [ここ](一番下、最後の1つ)で見つけましたが、少し変更しなければならなかったので、投稿しています多くのコード…​ ごめんなさい。

このコードを新しいモジュールに挿入し、「Microsoft Visual Basic For Applications Extensibility 5.3」への参照がオンになっていることを確認してください。プロジェクトは保護されません。 疑わしい場合は、http://www.cpearson.com/excel/vbe.aspx [こちら]をご覧ください。

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

5


タイトルとURLをコピーしました