在嘗試探索如何做到這一點後,我感到非常困惑。它非常簡單,但尚未找到解決方案。
我想知道的是以下內容。我有三個獨立的文件,所有這些文件在某種程度上都相互關聯;資料從文件(1.主輸入)輸入並彙總到三個電子表格中。
每個文件的佈局都相同,唯一的可變因素是日期,對於主輸入,我們有數值。
以插圖的形式,它看起來像這樣:
A。 1 主輸入 -->(饋入)2,3 b. 2 --> (饋入)3 和 4 c. 3 --> (饋入)4
我想知道的是,在文件2,3和4中......數據每年都會變化。作為範例,我有許多電子表格的「超連結」:
2015年=“\每日收入\2015[收入 2015.xls]年度摘要'!$C$160”
2016年=“\每日收入\2016[收入 2016.xls]年度摘要'!$C$160”
2017年=“\每日收入\2017[收入 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
。