我在Office 2010中使用VBA。在顶部,有一个包含行号和列号的框,例如:
Ln 1480, Col 17
有没有办法在代码编辑中直接跳转到另一个行号(而不是执行中),就像在记事本中使用Ctrl+G
一样? This MSDN answer表明这是不可能的,但我希望有人找到了一种方法来进行这种编辑导航。
我知道只需点击下拉菜单中的程序名称即可,但遗憾的是我正在处理几百行的一些程序,直到我重构它们,它会是很高兴能够在我的错误跟踪器中包含一个行号,并在我解决问题时跳转到该行。
答案 0 :(得分:8)
为VBA IDE制作自己的JumpToLine程序
创建一个名为mdlJumpToLine
的新模块,并添加以下方法:
Public Sub JumpToLine(line As Long)
Application.VBE.ActiveCodePane.SetSelection line, 1, line, 1
End Sub
例如,如果要跳转到代码模块或类中的第1,234行,已在当前代码窗格中打开,请在即时窗口中键入JumpToLine 1234
并点击输入。 如果该行已经在视图中,则不执行任何操作,但如果它不在屏幕上,则会自动滚动到屏幕中心
信任对VBA项目对象模型的访问
如果出现此错误,“对象'_Application'的方法'VBE'失败”,则必须以编程方式访问受信任的VBE。您可以通过(在Excel 2007中)转到主Excel窗口(而不是VBA IDE)并单击“文件”--->来执行此操作。 “选项”---> “信托中心”---> “信任中心设置”---> “宏设置”并选中“信任访问VBA项目对象模型”复选框。从那时起,JumpToLine方法应该可以工作。
答案 1 :(得分:4)
不知道。您可以使用编辑工具栏中的书签。如果未显示编辑工具栏,请转到查看下拉菜单,然后选择"工具栏"并选择"编辑"。
书签工具位于菜单右侧。
这样您就可以在代码中的任何位置放置书签。然后,您可以通过按向前或向后书签箭头在它们之间移动。
答案 2 :(得分:1)
如果您需要提供错误跟踪帮助,为什么不使用 GoTo标签?
我敢打赌,您的错误跟踪工具会为您提供错误或类似内容的ID。只需找到错误所在的部分并添加一行:
Bug1234: 'you may even add comments on the issue/bug
执行时会忽略此行,您可以使用 Ctrl + F 找到它并搜索标签名称。
上升是指如果您重构或更改代码中的任何内容,引用将保持有效,而如果您只是使用行号,则任何修改都将使引用无效。
答案 3 :(得分:1)
这个程序会提示你输入一个行号,然后(有点)带你到那条线去做你已经在的任何程序。两件事:它没有错误检查,所以它需要一些工作;如果你输入一个大于总行数的数字,它只会带你进入下一个程序。但是如果你输入,比方说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
答案 4 :(得分:0)
执行此操作的唯一方法是在代码中对行进行物理标记。这有点痛苦,但您可以通过使用此代码添加它们来实现此目的:
&encapsulator="
然后你必须添加一个函数来跳转到你需要的任何行:
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
来源:http://www.mrexcel.com/forum/excel-questions/576449-code-line-numbers-visual-basic-applications.html