2013-03-09 4 views
1

J'ai fait des recherches à ce sujet et je crains qu'il n'y ait pas de réponse. Mais peut-être que les gens vraiment intelligents sur ce site peuvent vous aider.Excel 2010: Comment modifier les données source de la table pivotante sans déconnecter les segments?

J'ai deux classeurs qui fonctionnent ensemble - Charts.xlsm et Data.xlsm. Ils sont toujours conservés dans le même dossier. Le fichier Charts.xlsm contient évidemment tous mes graphiques, mais ils sont tous liés aux tables de Data.xlsm pour leur source. J'ai aussi beaucoup de trancheurs dans mon fichier Charts.xlsm qui sont connectés aux graphiques, et ils partagent des caches quand ils sont connectés à des graphiques avec la même source de données. Les deux classeurs sont toujours ouverts en même temps afin que la référence de source de données ressemble à ceci: 'Data.xlsm'! Table1

Tout cela fonctionne très bien, jusqu'à ce que je mette ces classeurs sur un autre ordinateur (c'est pourquoi je suis ce faisant, j'ai besoin de savoir comment résoudre ce problème).

Une fois que les classeurs sont fermés, les références de données source changent à un emplacement spécifique sur mon disque dur: « C: \ Dossier \ Data.xlsm » Tableau 1

Si je veux changer manuellement ce retour à un local! référence, je dois d'abord passer par et déconnecter chaque tranche, rafraîchir les tables, puis reconnecter chaque trancheuse. Pas une solution viable pour mes clients. J'utiliserais VBA pour changer les références chaque fois que Charts.xlsm est ouvert, mais lorsque je l'ai essayé, deux choses se produisaient: soit le classeur produisait des erreurs qui empêchaient l'enregistrement, soit Excel plantait complètement.

C'est le code qui fonctionne parfaitement pour déconnecter les trancheuses, mais produit l'erreur « sauver »:

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 

Alors ... Je demande aux génies Excel/VBA là-bas s'il y a une façon Je peux maintenir un emplacement relatif pour mes graphiques lorsqu'ils recherchent Data.xlsm afin que, quel que soit l'ordinateur sur lequel j'ouvre ces classeurs, ils soient toujours activement liés.

Merci beaucoup à l'avance!

+0

Attention! Le sous-programme 'Disconnect_Slicers()' a réellement détruit mon programme Excel - maintenant rien ne sera sauvegardé. Je ne sais pas comment quelque chose d'aussi petit aurait pu détruire le fonctionnement interne d'Excel, mais c'est le cas. Donc ... la prudence est recommandée. –

Répondre

2

Si les deux fichiers se trouvent toujours dans le même dossier, vous pouvez éventuellement procéder ainsi.

A. Désactivez les 'UpdateLinks' automatiques du fichier Chart.xlsm. Vous pouvez le faire manuellement une fois ou, pour des raisons de sécurité, toujours quand BeforeClose événement se déclenche pour éviter certains problèmes possibles:

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

B. Lorsque vous ouvrez Chart.xlsm changer le lien vers l'aide Data.Xlsm classeur ouvert événement + actualiser les liens. Dans cette situation, nous vérifions le chemin vers le fichier Chart.Xlsm et recherchons Data.Xlsm dans le même dossier. Je suppose qu'il n'y a qu'un seul lien vers un autre fichier sinon certains changements pourraient être nécessaires:

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 

Je dois admettre que je ne considère pas tous les risques donc certains tests sont nécessaires.

+0

Merci pour cette suggestion! Je vais essayer cela aujourd'hui et poster comment ça va ... –

+0

Cela semble fonctionner parfaitement! Merci beaucoup! J'aime apprendre de nouvelles choses sur Excel :) –

Questions connexes