如何跳到VBA编辑器的行号?

我在Office 2010中使用了VBA。在顶部,有一个包含行号和列号的框,例如:

Ln 1480, Col 17 

有没有办法直接跳转到代码编辑(而不是执行)的另一个行号,就像我会在记事本中使用Ctrl+G ? 这MSDN的答案表明,这是不可能的,但我希望有人已经find一种方法来做这种编辑导航。

我知道可以在下拉菜单中点击一个过程名称,但不幸的是,我正在处理几百行程序,直到我将它们重构为止,能够包含行号在我的错误跟踪器中,当我正在解决这个问题的时候,跳到那一行。

为VBA IDE制作自己的JumpToLine过程

创build一个名为mdlJumpToLine的新模块并添加以下方法:

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

作为一个例子,如果你想跳到代码模块中的第1,234行或者你已经在当前代码窗口中打开的类,请在即时窗口中inputJumpToLine 1234 ,然后回车。 如果该行已经在视图中,则此操作不起任何作用,但是如果它不在屏幕上,则会自动滚动到屏幕的中心

信任对VBA项目对象模型的访问

如果你得到这个错误,对象'_Application'的方法'VBE'失败了,你将不得不编程访问被信任的VBE。 您可以通过(在Excel 2007中)进入主Excel窗口(不是VBA IDE),然后点击“文件”—>“选项”—>“信任中心”—>“信任中心设置“—>”macros设置“,然后选中”信任访问VBA项目对象模型“checkbox。 从此,JumpToLine方法应该可以工作。

不知道。 您可以使用编辑工具栏中的书签。 如果您的编辑工具栏没有显示,请转到视图下拉菜单并select“工具栏”并select“编辑”。

书签工具位于菜单的右侧。

在这里输入图像说明

这将允许您将代码中的书签放在任何位置。 然后,您可以通过向前或向后的书签箭头在两者之间移动。

如果你需要这个bug跟踪帮助,为什么不使用GoTo标签

我敢打赌,你的错误跟踪工具会为你提供一个错误ID或类似的东西。 只需find错误所在的部分,并添加一行:

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

这行在执行中被忽略,你可以使用Ctrl + F和search标签名来find它。

好处在于,如果您重构或更改代码中的任何内容,则引用将保持有效,而如果仅使用行号,则任何修改都将使引用无效。

这个过程会提示你input一个行号,然后(types)把你带到那个行,不pipe你已经在做什么过程。两件事情:没有错误检查,所以它需要一些工作。 如果你input的数字大于总数,那么只需要你进入下一个程序。 但是,如果你input了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