Office文档之秘密花园CustomXMLPart(1/2)

162 篇文章 16 订阅
2 篇文章 0 订阅

在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过程,则给出如下提示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值