传入的文本墙,当心 .
我有一个电子表格,对这些功能特别重要,有许多指向网络文档的链接 . 这些链接有一个地址(基本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