我尝试探索如何做到这一点后感到非常困惑。这很简单,但却找不到解决方案。
我想知道的是以下内容。我有三个独立的文档,它们都在某种程度上相互关联;数据从一个文档(1. 主输入)输入,并汇总到三个电子表格中。
每个文档的布局相同,唯一的变量因素是日期,对于主输入,我们有数值。
以插图形式看,它看起来像这样:
a. 1 主输入 --> (馈入) 2,3 b. 2 --> (馈入) 3 和 4 c. 3 --> (馈入) 4
我想知道的是,在文档 2、3 和 4 中……数据每年都在变化。我有许多电子表格的“超链接”作为示例:
2015 年=“\Daily Revenue\2015[Revenue 2015.xls]年度总结$C$160”
2016 年=“\Daily Revenue\2016[Revenue 2016.xls]年度总结'!$C$160”
2017 年 =“\Daily Revenue\2017[Revenue 2017.xls]年度总结'!$C$160”
从上面来看,我需要更改的唯一变量是年份,是否有任何代码/宏等可以用来替换年在超链接中。请记住,文件路径将总是保持不变。
我完全了解查找和替换但我希望让它变得用户友好且简单。
请帮助我,谢谢!
答案1
首先,你一直在谈论超链接。我认为你的意思是引用其他文件的公式。那些不是超链接。如果你真正指的是超链接,那么解决方案如下:
回答您的实际问题:是的,有一个宏可以解决这个问题。当然。我认为您需要了解的是对象Worksheet.Hyperlinks
。您可以循环遍历每个工作表中的每个超链接,并将地址替换为您想要的任何内容。以下是片段示例:
Sub ChangeHyperlinks()
Dim ws As Worksheet
Dim hyp As Hyperlink
For Each hyp In ws.Hyperlinks
hyp.Address = Replace(hyp.Address, "2015", "2016")
Next
End Sub
如果你不想改变,你就必须修改它每一个通过添加条件语句(如)来替换超链接If InStr(1, hyp.Address, "\Daily Revenue\2015") Then
。您可以使用事件在Workbook_Open
每次打开文件时运行,根据文件的名称获取正确的年份,然后运行替换超链接。是的,这将触发每一个即使文件已经正确,打开文件时也会发生这种情况。根据您拥有的超链接数量,这可能会没问题,也可能会导致一切停止。
如果您真正想要的是公式,这里有一个代码片段。同样,您必须根据自己的需求进行调整,但这应该可以帮助您入门。
Private Sub Workbook_Open()
Dim i As Integer
Dim srcArray As Variant
srcArray = ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)
For i = 1 To UBound(srcArray)
Debug.Print srcArray(i)
ThisWorkbook.ChangeLink srcArray(i), Replace(srcArray(i), "2015", "2016")
Next
End Sub
另外,如果你指的是公式,那么你的问题与堆栈溢出。
答案2
您的问题中有一些含糊之处。此答案假设您谈论的是其他工作簿中的单元格引用(如您的示例所示),而不是超链接,并且任务是将引用设置为可按年份调整,而不是每年重写所有公式。
首先,您需要在某处引用年份。不清楚您希望何时或以何种方式更改年份(每年 1 月 1 日自动更改?在您选择的日期更改?您希望能够随时更改年份?)。因此,我将基于通用解决方案。选择一个单元格来保存年份引用。对于我的示例,我将使用包含示例Z1
中单元格引用的工作表单元格。如果您希望能够随时更改年份或在您选择的日期更改年份,只需输入Z1
四位数年份。如果您希望年份在 1 月 1 日自动更改,请使用=YEAR(TODAY())
。
然后,不要将年份硬编码到每个公式中,而是连接引用Z1
并使用 INDIRECT 函数将文本字符串转换为单元格引用。例如:
'\Daily Revenue\2015[Revenue 2015.xls]Year Summary'!$C$160 becomes
INDIRECT("'\Daily Revenue\"&Z1&"[Revenue "&Z1&".xls]Year Summary'!$C$160")
对于现有工作表,您需要进行一次性更改以修改单元格引用。之后,您可以随时通过更改条目来更改年份Z1
。