传入的文本墙,当心 .

我有一个电子表格,对这些功能特别重要,有许多指向网络文档的链接 . 这些链接有一个地址(基本URL),一个子地址(#page =,需要在子地址中,因此Excel不会被#搞糊涂),以及一个显示文本,即页码 . 此电子表格包含其他人制作的XML Map .

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

我为此选择的方法是使用BeforeXMLExport和AfterXMLExport

  • 复制电子表格

  • 循环遍历电子表格,使用指向实际URL的超链接更改每个单元格的值,而不是显示文本

  • 出口

  • 删除已更改的电子表格

  • 最后给复制电子表格提供原始名称

  • 将XML Map 重新应用于电子表格,因为它在复制过程中丢失了 .

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

从不太重要的角度来看,我认为这不是最有效的方法 . 我特别担心的是

1)删除和重命名工作表似乎不必要的复杂,但我无法让Worksheet.Copy和Worksheet.Paste函数相互配合使用

2)最后重新映射更改的表单似乎是不必要的 . 有没有办法在保留XML Map 的同时复制电子表格?或者,我目前只是使用录制的宏重新映射 . 这是通过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