XML在VBA for Excel中的导出和映射

文字传入的墙壁,当心。

我有一个电子表格,对这些function特别重要,一些链接到一个网页文件。 这些链接有一个地址(基本URL),一个子地址(#page =,它需要在子地址中,所以Excel不会被#弄糊涂)以及一个显示文本,它是页码。 这个电子表格有其他人制作的XML地图。

如果我正常导出电子表格到XML,它只导出链接的显示文本(所以,页码,但不是实际的URL)。 我希望XML数据保存链接,而不是显示文本。

我select的方法是使用BeforeXMLExport和AfterXMLExport

  1. 复制电子表格
  2. 在电子表格中循环,将超链接的每个单元格的值更改为实际的URL,而不是显示文本
  3. 出口
  4. 删除已更改的电子表格
  5. 给副本电子表格原来的名字,最后
  6. 将XML映射重新应用到电子表格,因为在复制过程中丢失了它。

这样做的主要问题是,由于在实际导入时有两个电子表格,我的XML文件有一堆无用的数据 – 它也在导出包含显示文本而不是URL的电子表格。 将复制到不同的工作簿,然后将该表移动到原来的书,避免这个问题? 如果是这样,我该怎么办呢?

不太重要的一点,我不认为这是最有效的方法。 我特别关心的是

1)删除和重命名表单似乎不必要的复杂,但我无法得到Worksheet.Copy和Worksheet.Paste函数相互发挥很好

2)最后重新映射更改的表单似乎没有必要。 有没有办法复制电子表格,同时仍然保留XML映射? 另外,我目前只是使用logging的macros重新映射。 这是可能的编程方式通过VBA?

这是我目前的代码

Private Sub Workbook_BeforeXmlExport(ByVal Map As XmlMap, ByVal Url As String, Cancel As Boolean) Worksheets("Input Form").Copy After:=Worksheets("Input Form") 'Copies worksheet as it is prior to exporting Sheets("Input Form").Activate Dim cl As Range For Each cl In Range("A1:BD4") 'Loops through worksheet. The range would have to be changed later on If cl.Hyperlinks.Count <> 0 Then 'Checks cells for a link cl.Value = cl.Hyperlinks(1).Address & cl.Hyperlinks(1).SubAddress 'If the cell has a link, change the value of the cell to its hyperlink End If Next cl End Sub Private Sub Workbook_AfterXmlExport(ByVal Map As XmlMap, ByVal Url As String, ByVal Result As XlXmlExportResult) Application.DisplayAlerts = False 'For sheet deletion Application.ScreenUpdating = False 'Efficiency, hide ugly workaround Worksheets("Input Form").Delete 'Deletes changed worksheet Worksheets("Input Form (2)").Name = "Input Form" 'Changes the name of the copy into that of the original Application.Run "MapXML" 'Copying seems to lose the XML map. This macro, which I recorded manually, exists to remap. There is probably a way to do this through VBA, although I have yet to find it. Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub