2013-04-15 48 views
0

我已經將一張表格從一個excel文檔複製到另一個。 該表中的圖表也被複制。在excel中刪除外部鏈接diagramm

但是,diagramm中的數據是指另一個excel文檔,而不是當前表單。

這意味着,該鏈接看起來像

'C:\LokaleBilder\[P3-20x]Tabelle1'!$B$3:$B$403 

,而不是

'20x-(Kreuz)'!$B$3:$B$403 

注意,工作表名稱也發生了變化。

如果這是可以解決一些vba代碼,我想知道如何。

編輯:

注意,這些都不是超鏈接,其鏈接做的文件。

我試圖通過刪除文檔字符串來處理它。然而失敗:

Dim currSheet As String 
currSheet = ActiveSheet.Name 

ActiveSheet.ChartObjects("Diagramm 1").Activate 

Dim xSer As Series 
Dim xvalueStr As String 
Dim valueStr As String 
Dim m As Integer 
For m = 1 To ActiveChart.SeriesCollection.Count 
    xvalueStr = ActiveChart.SeriesCollection(m).XValues 

數據類型沒有在最後一行

EDIT2匹配

: 我能找出xvalues是數據類型Range的。然而,我可能不知道如何修改這個Range數據類型。

+0

你搜查這裏的價值問題呢?許多類似的問題萌芽。 [像這樣](http://stackoverflow.com/questions/8678752/in-excel-how-can-i-programmatically-edit-the-address-in-a-range-of-cells-contai),[或這裏](http://stackoverflow.com/questions/6903884/editing-hyperlinks-excel-2010-macro) – 2013-04-15 12:36:42

+0

你是怎麼做的複製?您可以使用VBA進行復制,一次一張,隨時修復圖表的鏈接。 – NickSlash

+0

@mehow,它的數據/工作簿鏈接,而不是超鏈接 – NickSlash

回答

0

我已經試圖重現你在做什麼(我認爲)。

我認爲你選擇了整個工作表,將其複製並粘貼到第二個工作簿的單元格A1中。在我的測試中,它複製了數據和圖表,但圖表仍然與源工作簿中的數據鏈接。

如果您確實要將整個工作表複製到另一個工作簿並保留任何圖表鏈接到複製的數據而不是源,我認爲使用移動或複製功能可讓您實現這一目標。

右鍵單擊工作表的選項卡並選擇移動或複製。在出現的對話框中,在下拉框中選擇您的第二個工作簿,您希望工作表使用列表框的位置,然後選中「創建副本」框。

move or copy

如果不解決您的問題,它的一個過程中,你需要經常重複,你可以使用宏錄製器來自動執行它。您可能需要稍微修改宏,但它應該會顯示如何以編程方式實現您的副本。

+0

這可能會解決它,但現在我已經在修復現有文檔。 –

0

我解決了.Formula

Option Explicit 

Sub MainRemoveDocumentLinks() 

ActiveSheet.ChartObjects("Diagramm 1").Activate 

Dim xSer As Series 
Dim valueStr As String 
Dim m As Integer 
For m = 1 To ActiveChart.SeriesCollection.Count 
    valueStr = ActiveChart.SeriesCollection(m).Formula 
    ActiveChart.SeriesCollection(m).Formula = replaceSeriesLink(valueStr) 
    Debug.Print ActiveChart.SeriesCollection(m).Formula 
Next 

End Sub 

Function replaceSeriesLink(inputStr As String) As String 

Dim currSheet As String 
currSheet = ActiveSheet.Name 

Dim pos As Integer 
Dim pos_old As Integer 

pos = 1 
pos_old = 0 

Dim pos_start As Integer 
Dim pos_end As Integer 

pos_start = 0 
pos_end = 0 

Do While pos > 0 
    pos = InStr(pos + 1, inputStr, "'") 
    If pos_old = pos Then 
     Exit Do 
    End If 
    If pos_start = 0 Then 
     pos_start = pos 
    Else 
     pos_end = pos 
     Dim DatalinkToReplace As String 
     DatalinkToReplace = Mid(inputStr, pos_start + 1, pos_end - pos_start - 1) 
     inputStr = Replace(inputStr, DatalinkToReplace, currSheet) 
     Debug.Print inputStr 
     pos_start = 0 
    End If 

    pos_old = pos 
Loop 

replaceSeriesLink = inputStr 

End Function