如何在VBA中对长字符串进行硬编码

时间:2018-03-04 09:16:43

标签: vba excel-vba excel

我正在编写宏来将VBA模块保存为另一个自解压模块中的64位字符串。自解压模块设计用于容纳多个长字符串(可以是任意长度,最多可达2GB字符串),以及一些简短的代码片段,用于解压缩字符串并导入它们所代表的模块。

无论如何,当我的宏构建自解压模块时,它需要保存真正长的字符串(我将其保存为硬编码的Const)。但是如果它们太长(> 1024 ish)以适应VBA编辑器中的单行,我就会出错。

我应该如何格式化这些硬编码字符串,以便我可以将它们保存为Const或以其他方式保存在我的自解压模块中?到目前为止,我已经将每个字符串保存为1000个字符块中的几个Const声明,但最好每个项目只有一个字符串。

1 个答案:

答案 0 :(得分:1)

根据注释中的建议,您可以使用自定义XML部件在工作簿中存储信息。

以下是代码:

Option Explicit

Public Sub AddCustomPart()

    Dim oXmlPart    As CustomXMLPart
    Dim strTest     As String

    strTest = "<Test_ID>123456</Test_ID>"

    Set oXmlPart = ReadCustomPart("Test_ID")

    '/ Check if there is already an elemnt available with same name.
    '/ VBA or Excel Object Model, doesn't perevnt duplicate entries.
    If oXmlPart Is Nothing Then
        Set oXmlPart = ThisWorkbook.CustomXMLParts.Add(strTest)
    Else
        MsgBox oXmlPart.DocumentElement.Text
    End If

End Sub

Function ReadCustomPart(strTest As String) As CustomXMLPart

    Dim oXmlPart    As CustomXMLPart

    For Each oXmlPart In ThisWorkbook.CustomXMLParts
        If Not oXmlPart.DocumentElement Is Nothing Then
            If oXmlPart.SelectSingleNode("/*").BaseName = strTest Then
                Set ReadCustomPart = oXmlPart
                Exit Function
            End If
        End If
    Next

    Set ReadCustomPart = Nothing

End Function