copiedVB工作表中表格数据的XML刷新刷新表格的所有实例

copiedVB工作表中表格数据的XML刷新刷新表格的所有实例,xml,excel,salesforce,metadata,vba,Xml,Excel,Salesforce,Metadata,Vba,感谢您的任何见解,(对于这篇冗长的帖子,我提前表示歉意) 我经常需要根据Salesforce.com组织(云安装)中配置的元数据为客户创建配置工作簿。客户希望此工作簿是Excel文件 Salesforce.com元数据API可用于为组织中的每个Salesforce.com对象创建方便的基于xml的“.object”文件,其中包含需要在Excel中结束的必要元数据 我已经创建了一个Excel工作簿,其中包含一个工作表,作为存储给定.object文件元数据的“模板” 我在这个工作表中创建了3个单独的

感谢您的任何见解,(对于这篇冗长的帖子,我提前表示歉意)

我经常需要根据Salesforce.com组织(云安装)中配置的元数据为客户创建配置工作簿。客户希望此工作簿是Excel文件

Salesforce.com元数据API可用于为组织中的每个Salesforce.com对象创建方便的基于xml的“.object”文件,其中包含需要在Excel中结束的必要元数据

我已经创建了一个Excel工作簿,其中包含一个工作表,作为存储给定.object文件元数据的“模板”

我在这个工作表中创建了3个单独的表,用于存储对象的自定义字段、记录类型和验证元数据

我创建了一个.XSD文件,用给定的.object文件中的元数据填充此工作表中的所有三个表

我希望VB宏使用此工作表、表和.XSD文件循环浏览执行以下任务的.object文件列表:

  • 复制现有模板工作表-已解决
  • 使用.object文件名的一部分重命名新副本-已解决
  • 使用.XSD文件和现有表导入XML(使用当前迭代的.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
    

    XmlMaps是一种工作簿范围的资源,我怀疑当您打开一个新的对象文件,但给它与同一工作簿中的现有XmlMap相同的schema和rootname时,它会认为您正在尝试更新以前的/现有的映射,而不是创建和添加一个新的映射

    我认为您需要先将模板表复制到新工作簿中,然后在新工作簿中创建并导入新的XmlMap


    或者,尝试进行以下更改:

    Sub newObject(fileName As String)
        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 String, myFile As String)
         myMap.Import myFolder & myFile
    
    End Sub
    

    很抱歉,我的有序列表显示为代码,但在我控制它之前,它不会发布我的问题。您说“我可以复制模板工作表并重命名它,但是当我为新工作表运行导入XML时,它会覆盖表的每个实例(所有工作表)中的数据。”此代码中有一个错误。向我们展示它,我们可以告诉你如何修复它。@rbaryyoung:谢谢你的反馈,我已经添加了代码。我应该说“可能有bug”。现在,我不太确定…@rbaryyoung:我认为ActiveSheet.Copy在某种程度上在结果工作表中包含了相同的表实例或类似的内容。我认为我需要将每张表中的表彼此分离,或者以某种方式从头开始构建一个新表。嗨,再次感谢您的帮助。不幸的是,这是我尝试的第一件事。它成功地将新映射添加到工作簿中,但结果完全相同。我切换到上面发布的原始代码,以便停止删除测试期间创建的所有映射文件。可能值得注意的是,当我的ImportXMLFromFile子运行myMap.Import(myFolder&myFile)时,我收到了一个下标超出范围的错误。当我创建新的XML映射并运行时:Call ImportXMLFromFile(“CustomObject_Map1”、“C:\SFDC ANT Projects\CCE\Production Data for Config Workbook\objects-QA\”、“Account.object”)我收到以下错误:“运行时错误“1004”:未导入任何数据,因为未映射任何元素。使用Range.XPath.SetValue将XML元素映射到工作表上。“此外,当查看右侧边栏上的源窗格时,很明显新映射已创建,但也很明显,架构数据到主工作表上的表的映射都不存在。错误1004是Excel在VBA出现未处理错误时引发的一般错误。添加一些错误处理,并使用带有err.Description的MsgBox查看VBA中的实际错误。很抱歉,我是VB的新手,我不确定如何实现您描述的错误处理。上面的运行时错误是相当具体的,下面引用的文本是错误的一部分吗?还是不够详细?“未导入任何数据,因为未映射任何元素。请使用Range.XPath.SetValue将XML元素映射到工作表上。”