在Excel VBA开发的时候,有些参数需要保存下来,而不是Hard Code写在代码中,通常会在Excel工作簿中创建一个隐藏工作表用于保存这些参数,其优势是方便编辑和维护,不缺点是稍有Excel知识的很容易就能找到并修改这些参数。其实在Office文档中还有更隐秘的一个秘密花园,可以用于藏宝,接下来就以Excel文件为例来演示,Word和PowerPoint文档的使用方法类似。
这个秘密花园就是CustomXMLPart,我们将要保存的内容如下,FN19是财年的缩写,当然大家可以将更复杂的XML保存在其中。
<FinancialYr>FN19</FinancialYr>
示例代码如下:
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)
End Sub
【代码解析】
第6行代码定义XML的Tag。
第7行代码生成XML字符串。
第8行代码在立即窗口中输出XML字符串。
第9行代码调用AddCustomXMLPart过程添加CustomXMLPart。
Function GetCustomXMLPart(ByVal strTag As String) As String
Dim objXmlPart As CustomXMLPart
For Each objXmlPart In ThisWorkbook.CustomXMLParts
If Not objXmlPart.DocumentElement Is Nothing Then
If objXmlPart.SelectSingleNode("/*").BaseName = strTag Then
GetCustomXMLPart = objXmlPart.DocumentElement.Text
Exit Function
End If
End If
Next
End Function
【代码解析】
GetCustomXMLPart函数用于读取CustomXMLPart。
第3~10行代码循环遍历Excel工作簿中的CustomXMLPart对象。
第5行代码定位指定Tag标识。
第6行代码读取该Tag的值。
Sub AddCustomXMLPart(ByVal strTag As String, ByVal strXML As String)
Dim strXmlPart As String
strXmlPart = GetCustomXMLPart(strTag)
If Len(strXmlPart) = 0 Then
ThisWorkbook.CustomXMLParts.Add strXML
MsgBox "成功添加 - " & strTag
Else
MsgBox strTag & " - 已经存在!"
End If
End Sub
【代码解析】
第3行代码调用GetCustomXMLPart函数用于读取指定Tag。
如果返回值为空,第5行代码使用ThisWorkbook.CustomXMLParts.Add
添加XML,否者提示指定Tag已经存在。
运行Demo过程,立即窗口中输出如下:
成功添加CustomXMLPart提示如下:
如果再次运行Demo过程,则给出如下提示: