我有以下代碼來更改工作簿的鏈接。
ThisWorkbook.ChangeLink "OldPath.xlsx", "NewPath.xlsx", xlLinkTypeExcelLinks
我的問題是,「NewPath.xlsx」表示對工作表對象比OldPath.xlsx稍有不同的名稱的工作簿。那麼,是否有一種方法可以通過編程方式更改與Excel工作簿相關的路徑,還可以更改實際的對象/範圍引用或有問題的外部鏈接?
在此先感謝。
我有以下代碼來更改工作簿的鏈接。
ThisWorkbook.ChangeLink "OldPath.xlsx", "NewPath.xlsx", xlLinkTypeExcelLinks
我的問題是,「NewPath.xlsx」表示對工作表對象比OldPath.xlsx稍有不同的名稱的工作簿。那麼,是否有一種方法可以通過編程方式更改與Excel工作簿相關的路徑,還可以更改實際的對象/範圍引用或有問題的外部鏈接?
在此先感謝。
是的,有。用一個簡單的替換聲明:
Sub UpdateSheetName()
Cells.Replace What:="OldSheetName", Replacement:="NewSheetName", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
如果工作簿中有工作表名稱的其他事件,你不希望他們被搜索捕獲,使用範圍有限。此外,您可以通過搜索「OldSheetName!」進行限制(使用「!」)並替換爲「NewSheetName!」。
這對使用問題中的簡單代碼行沒有任何影響。在這兩種情況下,你會得到一個窗口,要求確認表單變化,因爲在其他來源中不能識別... –
我唯一的想法是@ d-stroyer解決方案的擴展版本。您需要替換的公式包括對文件的路徑,以及部分(或簡稱工作簿引用如果是打開的):
Cells.Replace What:="C:\Users\Name\Desktop\[OldPath.xlsx]OldSheetName", _
Replacement:="C:\Users\Name\Desktop\[NewPath.xlsx]NewSheetName", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
不幸的是,這是不行的(我認爲,未測試),如果你想替換其他Excel元素中的鏈接,如:一系列圖表,可能是樞軸表的數據源等。
你說得對。這不起作用。此外,它有點笨重,因爲我必須解析OldPath和NewPath以從包含文件的文件夾中分離文件。 – William
僅供將來參考,定義名稱是預防將來出現此問題的最佳方法,因爲移動單元格無關緊要圍繞或重命名工作表。 –
如果從一開始只有這些是我的工作簿,我們不會有這個問題。我現在正在使用OpenXML SDK的另一個appraoch,我認爲它會起作用。儘管如此,我還是被其他項目抨擊了,所以現在這個項目並不重要。 – William
另外,爲了使命名範圍起作用,實際上需要打開鏈接的工作簿以刷新數據。 – William