1

私はこれについて狂ったように研究しました、そして私は答えがないのではないかと心配しています。しかし、おそらくこのサイトの本当に賢い人々が助けることができます。

一緒に機能する2つのワークブック(Charts.xlsmとData.xlsm)があります。それらは常に同じフォルダにまとめられています。Charts.xlsmには明らかに私のすべてのグラフが含まれていますが、それらはすべて、ソースのData.xlsmのテーブルにリンクされています。また、Charts.xlsmにはチャートに接続されているスライサーがたくさんあり、同じデータソースのチャートに接続されている場合はキャッシュを共有します。2つのワークブックは常に同時に開いているため、データソース参照は次のようになります。'Data.xlsm'!Table1

これらのワークブックを別のコンピューターに配置するまで、これはすべてうまく機能します(これを実行しているので、これを修正する方法を見つける必要があります)。

ワークブックを閉じると、ソースデータ参照がハードドライブ上の特定の場所に変更されます:'C:\ Folder \ Data.xlsm'!Table1

これを手動でローカル参照に戻したい場合は、最初にすべてのスライサーを調べて切断し、テーブルを更新してから、すべてのスライサーを再接続する必要があります。私のクライアントにとって実行可能なソリューションではありません。

Charts.xlsmを開くたびにVBAを使用して参照を変更しましたが、試してみると、ブックでエラーが発生して保存できないか、Excelが完全にクラッシュするかのいずれかが発生しました。

これは、スライサーを切断するために完全に機能するコードですが、「保存」エラーが発生します。

Sub Disconnect_Slicers()

Dim oSliceCache As SlicerCache
Dim PT As PivotTable
Dim i As Long

For Each oSliceCache In ThisWorkbook.SlicerCaches
    With ActiveWorkbook.SlicerCaches(oSliceCache.Name).PivotTables
        For i = .Count To 1 Step -1
            .RemovePivotTable (.Item(i))
        Next i
    End With
Next oSliceCache

End Sub

だから...私はExcel/VBAの天才たちに、Data.xlsmを探しているときにグラフの相対的な場所を維持できる方法があるかどうかを尋ねています。そうすれば、どのコンピューターでワークブックを開いても、常に積極的にリンクされます。

よろしくお願いします!

4

1 に答える 1

2

常に両方のファイルが同じフォルダにある場合は、この方法を使用できます。

A.Chart.xlsmファイルの自動「UpdateLinks」をオフにします。これは、手動で1回実行することも、安全上の理由から、BeforeClose発生する可能性のある問題を回避するためにイベントが発生したときに常に実行することもできます。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.UpdateLinks = xlUpdateLinksNever
End Sub

B. Chart.xlsmを開いたら、Workbook Openイベントを使用してリンクをData.Xlsmに変更し、さらにリンクを更新します。この状況では、Chart.Xlsmファイルへのパスを確認し、同じフォルダーでData.Xlsmを検索します。他のファイルへのリンクは1つだけだと思います。そうしないと、いくつかの変更が必要になる可能性があります。

Private Sub Workbook_Open()
'changing first and only one link to new one
Dim a
a = ActiveWorkbook.LinkSources
    ThisWorkbook.ChangeLink Name:=a(1), _
        NewName:=ThisWorkbook.Path & "\Data.xlsm", Type:=xlExcelLinks    
'update the link
ThisWorkbook.UpdateLink Name:=a(1), Type:=xlExcelLinks
End Sub

私はすべてのリスクを考慮しているわけではないことを認めます。したがって、いくつかのテストが必要です。

于 2013-03-09T21:34:00.680 に答える