请让我更好地解释我的问题。我想要做的是:
1) 有一个包含 100 个工作表的工作簿
2) 每个工作表都有不同的选项卡名称
3) 每个工作表包含一系列单元格,我将在其中输入可能是也可能不是另一个工作表的选项卡名称的条目
4) 如果我碰巧在任何工作表的任何单元格中输入其中一个工作表的选项卡名称,则此名称会自动超链接到该工作表,因此通过单击此单元格,我将被重定向到该工作表。在这个目标工作表中,我可以对单元格执行相同操作并重定向到另一个工作表,依此类推,从一个工作表跳转到另一个工作表。
您对如何通过这种方式设置单元格区域有什么想法吗?
我知道当单元格条目以“http://”或“www”开头时,Excel 会自动创建 Internet 超链接。当目标位于同一文档中而不是在网络上时,也可以这样做吗?
我能找到的最接近的解决方案是这个公式,在单元格 C3 中输入:
=IF(A3="P",HYPERLINK("[Test.xlsx]生产!D2","NEXT >>>"),HYPERLINK("[Test.xlsx]供应!D2","NEXT >>>"))
如果单元格 A3 中的值 = P,并且我单击单元格 C3 中的超链接,它将带我进入生产工作表的单元格 D2。对于 A3 中的任何其他值,它将带我进入供应工作表的单元格 D2。
但这仍然不是我想要的。在我的例子中,我希望能够在 A3 中输入“生产”,将其转换为可点击的链接,因为它是工作表的名称,并且当我单击 A3 而不是其他单元格时重定向到生产工作表。
我研究了 IF 公式,但它们除了计算、复制值等之外不能执行任何操作。所以我想我唯一的选择是使用 VBA,但不幸的是这不是我的强项。
任何帮助都将不胜感激。
答案1
我确实相信 VBA 代码是解决您的问题的最佳方法。
现在让我告诉你如何使用这个代码。
这可以用作工作表_更改或者命令按钮_单击,事件 甚至作为宏。
现在最好的做法是,在工作表中的几个空白单元格中输入工作表名称,在我的例子中,单元格地址是 A2 向下. 根据“代码事件”VBA 会将它们转换为超链接。
Private Sub CommandButton1_Click()
Dim i As Long
With Sheets("Sheet1")
For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
.Hyperlinks.Add Anchor:=.Range("A" & i), Address:="", _
SubAddress:="'" & .Range("A" & i).Value & "'!A1", TextToDisplay:=.Range("A" & i).Value
Next i
End With
End Sub
注意:检查代码的第 4 行,For i = 2 To .Range("A" & .Rows,,,
这个 2 是行号,A 列名表示单元格 A2 是指定区域向下开始的第一个单元格。您可以根据需要修改它。
另外我的建议是,首先使用代码作为命令按钮单击事件。
希望这对你有帮助。
笔记, 在我将其发布为解决方案之前,我已经测试过此代码。
答案2
笔记, 根据他的建议,添加这些行作为答案来帮助 OP。
按照以下步骤完成这项工作。
- 转到空白表,在单元格 A2 和 A3 中写入您的表名称,如 Sheet1、Sheet2。
- 点击“开发人员”选项卡,找到“设计模式”,单击它。
- 它的左边是插入,单击它并选择命令按钮,然后在工作表的空白区域中的任何位置绘制它。
- 双击绘制的命令按钮,Excel将打开VBA编辑器。
- 您会找到 CommandButton1_Click() 和 End Sub 行。
- 在复制和粘贴代码之间。记住从第 2 行开始复制,并以第 8 行结束。
- 关闭VBA编辑器窗口,再次点击设计按钮,就正常了。
- 最后单击命令按钮。
您会发现 A2 和 A3 中的 Sheet Name 变成了超链接。
注意:从单元格 A2 向下,您可以在列中写入任意多个工作表名称。