Office 2010でVBAを使用しています。上部に、行番号と列番号が記載されたボックスがあります。例:
Ln 1480, Col 17
メモ帳でCtrl+G
を使用するのと同じ方法で、コード編集(実行中ではない)で別の行番号に直接ジャンプする方法はありますか? このMSDNの回答 は不可能であることを示唆していますが、誰かがこの種のエディターナビゲーションを行う方法を見つけてくれることを願っています。
ドロップダウンでプロシージャ名をクリックするだけでよいことは知っていますが、残念ながら、数百行の長さのプロシージャを使用しており、リファクタリングされるまで、行番号を含めることができれば素晴らしいと思います。バグトラッカーで問題を解決しているときにその行にジャンプします。
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メソッドが機能するはずです。
バグ追跡支援のためにそれが必要な場合は、GoToラベルを使用してみませんか?
あなたのバグ追跡ツールがあなたにバグまたは類似のもののIDを取得するに違いありません。バグがある部分を見つけて、それに行を追加するだけです。
Bug1234: 'you may even add comments on the issue/bug
この行は実行時に無視され、を使用して見つけることができます Ctrl+F ラベル名を検索します。
psideは、コード内の何かをリファクタリングまたは変更した場合、参照は有効なままですが、単に行番号を使用した場合、変更を加えると参照が無効になります。
この手順では、行番号の入力を求められ、次に(一種の)すでに実行している手順に応じてその行に移動します。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
これを行う唯一の方法は、コード内の行に物理的にラベルを付けることです。少し面倒ですが、次のコードを使用して追加することでこれを行うことができます。
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