0

ある Excel ドキュメントから別の Excel ドキュメントにテーブル シート全体をコピーしました。そのシートのダイアグラムもコピーされました。

ただし、ダイアグラム内のデータは、現在のシートではなく、他の 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 が datatype であることがわかりましたRange。ただし、この Range データ型を変更する方法がわかりませんでした。

4

2 に答える 2

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
于 2013-04-15T15:20:32.260 に答える