VBA代码如何像goto函数一样运行:“Ctrl- [”和“F5”

3

请问是否有VBA代码可以模拟Excel中的常规goto功能,即使用Ctrl+[F5快捷键?

以下是进一步的详细说明:

Problem.xlsx文件中有两个工作表——AlphaBeta

我希望有一段代码可以

  1. Alpha 工作表的单元格 A2 上执行 Ctrl+[ 操作(即获取单元格中的 Beta!B5 引用)
  2. 使用 Beta!B5 引用跳转到 Beta 工作表的单元格 B5
  3. 向右移动一个单元格,即 Beta 工作表的 C5 单元格,并将该单元格涂成黄色
  4. 最后按下 F5 返回到 Alpha 工作表的单元格 A2

我已经在 Google 上搜索了 2 个小时,使用了各种关键字,如 gotoctrl-[F5previous selection 等等,但都没有找到答案。

附加说明:

我正在尝试模拟Ctrl-[和F5这两个转到函数,以便VBA代码可以在我所在的任何活动单元格(具有指向另一个工作表中其他单元格的链接)上执行跳转、颜色着色并跳回原始工作表。即下面的代码过于受限制。
Sub JumpColourJump()
    Worksheets("Beta").Range("B5").Offset(, 1).Interior.Color = vbYellow
    Worksheets("Alpha").Range("A2").Select
End Sub

代码应该是灵活的,可以跳转到活动单元格引用的同一文件或另一个文件中的任何表格。

Problem.xlsx不是公开可见的(需要注册),因此我已删除链接。请重新上传到其他地方。 - Danny Beckett
对不起大家,我刚刚编辑了文件链接。现在应该可以使用了。 - user2180895
SkyDrive也有同样的问题:http://i.imgur.com/DpwIT5s.png...虽然它仍然比一些随机的论坛链接要好。 - Danny Beckett
1
再次道歉..我已经放了一个新链接到文件。 - user2180895
2个回答

0

为了在页面之间来回切换,可以使用类似这样的代码。

'follow local hyperlink
Application.Goto Reference:=Worksheets("Alpha").Cells(1, 1).FormulaR1C1
'color the cell to the right
ActiveCell.Offset(0, 1).Interior.Color = vbYellow
'return using the same method

然后,您可以使用ActiveCell.Offset(row, col)来获取正确的单元格并执行操作,并使用相同的方法返回。


为了返回到先前的位置,您可以将其保存在一个变量中,
Dim returnSheet As String, returnCell As String
returnSheet = ActiveSheet.Name
returnCell = CStr(ActiveCell.Address(False, False))
'Jump to cell, do your magic
Application.Goto Reference:=Worksheets(returnSheet).Range(returnCell)

或者,对于从单元格到单元格的多次跳跃,实现推入和弹出函数的类模块像堆栈一样是理想的。


谢谢克苏鲁。Ctrl-[ 等同于 Application.Goto Reference:=CStr(ActiveCell.FormulaR1C1)。那么“返回”跳转‘F5’呢? - user2180895
@user2180895 你可以将当前位置的值存储在一个变量中(如果有多个嵌套跳转,则可以使用集合),并重新跟踪你的路径。 - Anirudh Ramanathan
这段代码可以显示“转到”对话框:Application.Dialogs(xlDialogFormulaGoto).Show。如果有一种编写代码以单击“确定”按钮的方法,那么它将成为一个F5 + Enter函数。 - user2180895
@user2180895 我认为这是不可能的。无论如何,我建议您使用 VBA 代码完成,而不涉及 UI 元素,类似于上面详细介绍的方式。 - Anirudh Ramanathan

0

大部分的代码可以通过录制宏来生成,但更复杂的部分似乎包括:

  • 导航到引用所选单元格的第一个单元格 - 这篇superuser文章 看起来提供了一些不错的建议
  • 返回上一个工作表 - 您可以在函数开头取得一个对活动工作表的引用,然后在执行完毕之后恢复它,例如:
Dim initalSheet As Worksheet
' Take a reference to the current sheet
Set initialSheet = ActiveSheet

' *** Perform changes here ***

' Return to the initially selected sheet
initialSheet.Select

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接