2013-07-15 86 views
4

全部,以編程方式在工作簿中更改鏈接

我有以下代碼來更改工作簿的鏈接。

ThisWorkbook.ChangeLink "OldPath.xlsx", "NewPath.xlsx", xlLinkTypeExcelLinks

我的問題是,「NewPath.xlsx」表示對工作表對象比OldPath.xlsx稍有不同的名稱的工作簿。那麼,是否有一種方法可以通過編程方式更改與Excel工作簿相關的路徑,還可以更改實際的對象/範圍引用或有問題的外部鏈接?

在此先感謝。

+0

僅供將來參考,定義名稱是預防將來出現此問題的最佳方法,因爲移動單元格無關緊要圍繞或重命名工作表。 –

+0

如果從一開始只有這些是我的工作簿,我們不會有這個問題。我現在正在使用OpenXML SDK的另一個appraoch,我認爲它會起作用。儘管如此,我還是被其他項目抨擊了,所以現在這個項目並不重要。 – William

+0

另外,爲了使命名範圍起作用,實際上需要打開鏈接的工作簿以刷新數據。 – William

回答

0

是的,有。用一個簡單的替換聲明:

Sub UpdateSheetName() 

    Cells.Replace What:="OldSheetName", Replacement:="NewSheetName", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
End Sub 

如果工作簿中有工作表名稱的其他事件,你不希望他們被搜索捕獲,使用範圍有限。此外,您可以通過搜索「OldSheetName!」進行限制(使用「!」)並替換爲「NewSheetName!」。

+2

這對使用問題中的簡單代碼行沒有任何影響。在這兩種情況下,你會得到一個窗口,要求確認表單變化,因爲在其他來源中不能識別... –

1

我唯一的想法是@ 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元素中的鏈接,如:一系列圖表,可能是樞軸表的數據源等。

+0

你說得對。這不起作用。此外,它有點笨重,因爲我必須解析OldPath和NewPath以從包含文件的文件夾中分離文件。 – William

相關問題