web-dev-qa-db-ja.com

VBAエディターで行番号にジャンプする方法は?

Office 2010でVBAを使用しています。上部に、行番号と列番号が記載されたボックスがあります。例:

Ln 1480, Col 17

メモ帳でCtrl+Gを使用するのと同じ方法で、コード編集(実行中ではない)で別の行番号に直接ジャンプする方法はありますか? このMSDNの回答 は不可能であることを示唆していますが、誰かがこの種のエディターナビゲーションを行う方法を見つけてくれることを願っています。

ドロップダウンでプロシージャ名をクリックするだけでよいことは知っていますが、残念ながら、数百行の長さのプロシージャを使用しており、リファクタリングされるまで、行番号を含めることができれば素晴らしいと思います。バグトラッカーで問題を解決しているときにその行にジャンプします。

11
sigil

VBA IDE用に独自のJumpToLineプロシージャを作成します

mdlJumpToLineという名前の新しいモジュールを作成し、次のメソッドを追加します。

Public Sub JumpToLine(line As Long)
    Application.VBE.ActiveCodePane.SetSelection line, 1, line, 1
End Sub

例として、コードモジュールまたはクラスの行1,234にジャンプする場合は、現在のコードペインで開いています、イミディエイトウィンドウにJumpToLine 1234と入力し、Enterキーを押します。 その行がすでに表示されている場合、これは何もしませんが、画面外にある場合は、自動的に画面の中央にスクロールされます

VBAプロジェクトオブジェクトモデルへの信頼アクセス

「オブジェクト '_Application'のメソッド 'VBE'が失敗しました」というエラーが発生した場合は、VBEへのプログラムによるアクセスを信頼できるものにする必要があります。これを行うには、(Excel 2007では)Excelのメインウィンドウ(VBA IDEではない)に移動し、[ファイル] ---> [オプション] ---> [セキュリティセンター] ---> [セキュリティセンターの設定]をクリックします。 「--->「マクロ設定」」および「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」のチェックボックスを選択します。それ以降、JumpToLineメソッドが機能するはずです。

9
Blackhawk

知らない。編集ツールバーからブックマークを使用できます。編集ツールバーが表示されていない場合は、[表示]プルダウンメニューに移動し、[ツールバー]を選択して[編集]を選択します。

ブックマークツールはメニューの右側にあります。

enter image description here

これにより、コード内の好きな場所にブックマークを配置できます。次に、ブックマークの前後の矢印を押すことで、それらの間を移動できます。

5
MatthewD

バグ追跡支援のためにそれが必要な場合は、GoToラベルを使用してみませんか?

あなたのバグ追跡ツールがあなたにバグまたは類似のもののIDを取得するに違いありません。バグがある部分を見つけて、それに行を追加するだけです。

Bug1234: 'you may even add comments on the issue/bug

この行は実行時に無視され、を使用して見つけることができます Ctrl+F ラベル名を検索します。

psideは、コード内の何かをリファクタリングまたは変更した場合、参照は有効なままですが、単に行番号を使用した場合、変更を加えると参照が無効になります。

1
Paulo Avelar

この手順では、行番号の入力を求められ、次に(一種の)すでに実行している手順に応じてその行に移動します。2つのこと:エラーチェックがないため、そこで作業が必要です。合計行数よりも大きい数を入力すると、次の手順に進むだけです。ただし、たとえば30と入力すると、モジュールの30行目だけでなく、現在の手順の30行目に移動します。

Public Sub GotoLine()

    Dim lLine As Long, lActiveLine As Long
    Dim sProc As String
    Dim ProcType As Long
    Dim vbaModule As CodeModule
    Dim vbaPane As CodePane

    lLine = Application.InputBox("Enter Line", "Go to Line", , , , , , 1)
    Set vbaPane = Application.VBE.ActiveCodePane
    Set vbaModule = vbaPane.CodeModule

    If lLine > 0 Then
        vbaPane.GetSelection lActiveLine, 0, 0, 0
        sProc = vbaModule.ProcOfLine(lActiveLine, vbext_pk_Proc)

        With vbaModule
            .CodePane.SetSelection .ProcStartLine(sProc, ProcType) + lLine, 1, .ProcStartLine(sProc, ProcType) + lLine + 1, 1
        End With
    End If

End Sub
1
Dick Kusleika

これを行う唯一の方法は、コード内の行に物理的にラベルを付けることです。少し面倒ですが、次のコードを使用して追加することでこれを行うことができます。

Sub AddLineNumbers(wbName As String, vbCompName As String)
    Dim i As Long, j As Long, lineN As Long
    Dim procName As String
    Dim startOfProceedure As Long
    Dim lengthOfProceedure As Long
    Dim newLine As String

    With Workbooks(wbName).VBProject.VBComponents(vbCompName).CodeModule
        .CodePane.Window.Visible = False

        For i = 1 To .CountOfLines
            procName = .ProcOfLine(i, vbext_pk_Proc)

            If procName <> vbNullString Then
                startOfProceedure = .ProcStartLine(procName, vbext_pk_Proc)
                lengthOfProceedure = .ProcCountLines(procName, vbext_pk_Proc)

                If startOfProceedure + 1 < i And i < startOfProceedure + lengthOfProceedure - 1 Then
                    newLine = RemoveOneLineNumber(.Lines(i, 1))
                    If Not HasLabel(newLine) And Not (.Lines(i - 1, 1) Like "* _") Then
                        .ReplaceLine i, CStr(i) & ":" & newLine
                    End If
                End If
            End If

        Next i
        .CodePane.Window.Visible = True
    End With
End Sub

次に、到達するために必要な行にジャンプする関数を追加する必要があります。

Function JumpToLine(LnNum as String)
  GoTo LnNum
End Function

ソース: http://www.mrexcel.com/forum/Excel-questions/576449-code-line-numbers-visual-basic-applications.html

0
Johnny Bones