洞察に感謝します(そして、長い投稿を前もってお詫びします)
Salesforce.com 組織 (クラウド インストール) で構成されたメタデータに基づいて、クライアント用の構成ワークブックを定期的に作成する必要があります。クライアントは、このワークブックが Excel ファイルであることを好みます。
Salesforce.com メタデータ API を使用して、組織内の各 Salesforce.com オブジェクト用の便利な xml ベースの「.object」ファイルを作成できます。このファイルには、最終的に Excel に必要なメタデータが含まれています。
特定の .object ファイルのメタデータを格納するための「テンプレート」として機能する単一のワークシートを含む Excel ワークブックを既に作成しています。
オブジェクトのカスタム フィールド、レコード タイプ、および検証メタデータを格納するために、このワークシートに 3 つの個別のテーブルを作成しました。
このワークシートの 3 つのテーブルすべてに、特定の .object ファイルからのメタデータを入力する単一の .XSD ファイルを作成しました。
VB マクロで、このワークシート、テーブル、および .XSD ファイルを使用して、次のタスクを実行する .object ファイルのリストをループ処理したいと考えています。
- 既存のテンプレート ワークシートをコピーする - 解決済み
- .object ファイル名の一部を使用して新しいコピーの名前を変更する - 解決済み
- .XSD ファイルと既存のテーブルを使用した ImportXML (新しいワークシート テーブルに現在の反復の .object ファイル メタデータを入力します)
- 次の .object ファイルまで繰り返し、それぞれに独自のタブができるまで繰り返します
注:この .object のリストは、おそらくディレクトリをスキャンして、構成ワークブックごとに個別に作成します。
主な問題: テンプレート ワークシートをコピーして名前を変更することはできますが、新しいワークシートに対してインポート XML を実行すると、(すべてのワークシートにわたって) テーブルのすべてのインスタンスのデータが上書きされます。
これが意味することは、必要なすべてのワークシートが得られることになりますが、各ワークシートに適切な .object 固有のメタデータではなく、実行された最終インポートからの同じ .object ファイルのメタデータがすべて含まれることになります。
質問:
- このアーキテクチャは問題に適していますか?
元のワークシート (保持したいテーブル以外のデータと書式設定を含む) をコピーして追加の各シートを作成しているので、同じテーブルを各シートにコピーする必要があると想定しています。
- これらのコピーされたテーブルを互いに分離し、.XSD データバインディングを維持する方法はありますか?
- テーブルを削除し、各ワークシートで新しいテーブルを最初から再構築する方がよいでしょうか?
- ここで間違ったツリーを吠えていますか?
Sub newObject(fileName As String)
Dim folderPath As String
Dim myMap As XmlMap
Dim schemaPath As String
folderPath = "C:\...\objects - QA\"
schemaPath = "mySchema.XSD"
ActiveSheet.Copy After:=Sheets(Sheets.Count)
'Name the new copied 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 String, myFolder As String, myFile As String)
' buildFieldsListS (myMap)
ThisWorkbook.XmlMaps(myMap).Import (myFolder + myFile)
Exit Sub
MyErr:
MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly
End Sub