在Excel VBA开发的时候,有些参数需要保存下来,而不是Hard Code写在代码中,通常会在Excel工作簿中创建一个隐藏工作表用于保存这些参数,其优势是方便编辑和维护,不缺点是稍有Excel知识的很容易就能找到并修改这些参数。其实在Office文档中还有更隐秘的一个秘密花园,可以用于藏宝,接下来就以Excel文件为例来演示,Word和PowerPoint文档的使用方法类似。
Excel将XML保存在哪里了呢?如果只是保存在内存中,那么关闭Excel后,这些内容就注定会丢失的。其实XML被保存在Excel文件中,将文件名后缀改为ZIP,使用压缩软件打开,浏览定位到目录customXml
,其中的item1.xml
就是保存CustomXMLPart的文件。
使用文本编辑器打开item1.xml
,如下图所示。
上一篇博客演示了对于相同的Tag,无法重复添加,如果需要修改XML中的值,该如何实现呢?一种方法是,先删除CustomXMLPart,然后再重新添加新的XML,另外一种方法是直接修改某个XML Node的值,这和操作普通的XML是完全类似。
示例代码如下:
Function blnUpdateCustomXMLPart(ByVal strTag As String, ByVal strVal As String) As Boolean
Dim objXmlPart As CustomXMLPart
blnUpdateCustomXMLPart = False
For Each objXmlPart In ThisWorkbook.CustomXMLParts
If Not objXmlPart.DocumentElement Is Nothing Then
Dim A
Set A = objXmlPart.SelectSingleNode("/*")
If objXmlPart.SelectSingleNode("/*").BaseName = strTag Then
objXmlPart.DocumentElement.Text = strVal
blnUpdateCustomXMLPart = True
Exit For
End If
End If
Next
End Function
【代码解析】
函数的两个参数分别是:strTag指定XML Tag,strVal指定新的值。
第4~14行代码遍历CustomXMLPart。
第6行代码定位指定的XML Tag,注意需要使用BaseName属性。
第7行代码设置新的属性值。
第8行代码指定函数返回值、
第9行代码退出循环。
更新Demo过程代码如下。
Sub Demo()
Dim objXmlPart As CustomXMLPart
Dim strXML As String
Dim strTag As String
Dim strVal As String
strTag = "FinancialYr"
strXML = VBA.Replace("<TAG>FN19</TAG>", "TAG", strTag)
Debug.Print strXML
Call AddCustomXMLPart(strTag, strXML)
MsgBox GetCustomXMLPart(strTag)
strVal = "FN20"
If blnUpdateCustomXMLPart(strTag, strVal) Then _
MsgBox GetCustomXMLPart(strTag)
End Sub
【代码解析】
增加第11和12代码,更新成功后,查询指定Tag,结果如下所示:
CustomXMLPart的基本用法介绍就到这里,如果大家有更多的好思路,欢迎留言。