L'actualisation XML des données de table dans la feuille de travail CopiedVB actualise toutes les instances de table

Merci pour tout aperçu, (et je m'excuse d'avance pour la longue publication)

Je dois régulièrement créer un classur de configuration pour les clients en fonction des métadonnées configurées dans leur Orgure Salesforce.com (installation sur le cloud). Les clients préfèrent que ce classur soit un file Excel.

L'API MetaForata Salesforce.com peut être utilisée pour créer des files '.object' basés sur xml pour chaque object Salesforce.com dans l'org, qui contiennent les métadonnées nécessaires qui doivent se terminer dans Excel.

J'ai déjà créé un classur Excel contenant une seule feuille de calcul qui sert de «model» pour stocker les métadonnées pour un file .object donné.

J'ai créé 3 tables séparées dans cette feuille de calcul, pour mémoriser les méta-données de champ, de type d'logging et de validation pour l'object.

J'ai créé un seul file .XSD qui remplit les trois tables de cette feuille de calcul avec les métadonnées d'un file .object donné.

J'aimerais qu'une macro VB utilise cette feuille de calcul, des tables et un file .XSD pour passer une list des files .object effectuant les tâches suivantes:

  1. Copier la feuille de calcul du model existant – Résolu
  2. Renommer la nouvelle copy avec une partie du nom de file .object – Résolu
  3. ImportXML à l'aide du file .XSD et des tables existantes (remplissez les nouvelles tables de feuilles de calcul avec les métadonnées du file .object actuel)
  4. Iterate au prochain file .object et répéter jusqu'à ce que chacun ait son propre onglet

REMARQUE: Je créerai cette list de .object séparément pour chaque classur de configuration, probablement en scannant un directory

Difficulté majeure: je peux copyr la feuille de calcul du model et le renommer, mais lorsque je lance le XML d'import pour la nouvelle feuille de calcul, c'est écraser datatables dans toutes les instances des arrays (dans toutes les feuilles de calcul).

Ce que cela signifie, c'est que je terminerai avec toutes les feuilles de travail dont j'ai besoin, mais elles contiendront toutes les métadonnées du même file .object de l'import finale effectuée, au lieu des métadonnées spécifiques .object appropriées à chaque feuille de calcul.

Des questions:

  1. Cette architecture est-elle appropriée pour le problème?
  2. Puisque je copy la feuille de travail originale (elle contient des données non-tables et un formatting que j'aimerais conserver) pour créer chacune, j'impose qu'il faut copyr la même table sur chaque feuille.

  1. Existe-t-il un moyen de découpler ces tables copiées les uns des autres et de maintenir mes données de données .XSD?
  2. Suis-je mieux de supprimer la table et de rebuild une nouvelle de rien dans chaque feuille de calcul?
  3. Est-ce que je gronde le mauvais tree ici?

Voici mon code:

Sub newObject(fileName As Ssortingng) Dim folderPath As Ssortingng Dim myMap As XmlMap Dim schemaPath As Ssortingng folderPath = "C:\...\objects - QA\" schemaPath = "mySchema.XSD" ActiveSheet.Copy After:=Sheets(Sheets.Count) 'Name the new copyd sheet ActiveSheet.Name = Left(fileName, Len(fileName) - 7) & ActiveWorkbook.XmlMaps.Count 'Add a named XmlMap to the collection Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath) Call ImportXmlFromFile(folderPath & schemaPath, folderPath, fileName) End Sub Sub ImportXmlFromFile(myMap As Ssortingng, myFolder As Ssortingng, myFile As Ssortingng) ' buildFieldsListS (myMap) ThisWorkbook.XmlMaps(myMap).Import (myFolder + myFile) Exit Sub MyErr: MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly End Sub 

Les files Xml sont une ressource à l'échelle du classur, je soupçonne que lorsque vous ouvrez un nouveau file object, donnez-le le même, le schéma et le nom racine comme XmlMap exisiting dans le même classur, il pense que vous essayez de mettre à jour la carte existante , au lieu de créer et d'append un nouveau.

Je pense que vous devez d'abord copyr la feuille de model dans le Nouveau classur, puis créer et importer le nouveau XmlMap dans ce nouveau classur.


Sinon, essayez avec les modifications suivantes:

 Sub newObject(fileName As Ssortingng) On Error Goto MyERR ' ... ' 'Add a named XmlMap to the collection' Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath) Call ImportXmlFromFile(myMap, folderPath, fileName) Exit Sub MyErr: MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly End Sub Sub ImportXmlFromFile(myMap As XmlMap, ByVal myFolder As Ssortingng, myFile As Ssortingng) myMap.Import myFolder & myFile End Sub