使用预制的Stringbuilder类

我正在学习如何在VBA中使用stringbuilder函数,但在VBA中如何使用它们时遇到问题。 我可以使用一些帮助来使用预先创build的stringbuilder类。

我知道,每个这些潜艇在编写最终代码方面都起着一定的作用。 例如,我已经看到其他使用"string.append"例子,但我不确定在这种情况下它是如何工作的。 我可以使用一点点洞察如何利用这个代码。 请帮忙!

我理解的最好方法是如果有人可以用这个例子的stringbuilder类把几行代码放在一起。 谢谢!!

 Private m_arrBuffer Private m_strDelimiter Private Sub Class_Initialize() m_arrBuffer = Array() m_strDelimiter = “” End Sub Private Sub Class_Terminate() m_arrBuffer = Empty End Sub Public Property Get Delimiter() Delimiter = m_strDelimiter End Property Public Property Let Delimiter(strDelimiter) m_strDelimiter = strDelimiter End Property Public Sub Append(strValue) ReDim Preserve m_arrBuffer(UBound(m_arrBuffer) + 1) m_arrBuffer(UBound(m_arrBuffer)) = strValue End Sub Public Sub AppendLine(strValue) Me.Append strValue & vbCrLf End Sub Public Sub Compact() If Not Me.Delimiter = “” Then strOriginalDelimiter = Me.Delimiter Me.Delimiter = “” End If strTemp = Me.ToString m_arrBuffer = Array() Me.Append strTemp Me.Delimiter = strOriginalDelimiter End Sub Public Function ToArray() ToArray = m_arrBuffer End Function Public Function ToString() ToString = Join(m_arrBuffer, m_strDelimiter) End Function 

VBA中的string连接( & )非常缓慢,因此如果您需要组合大量string,那么像这样的“stringbuilder”类通常用于加速进程。

总体思路是使用Array()存储单个string组件,然后在需要时使用Join()函数将所有string合并一次 。 随着string的添加,数组会自动resize。 许多人使用"GrowBy"function(尽pipe这不是)在达到数组限制时通过静态大小或因子来增长arrays。 这也可以提高性能,因为为每个string插入调用ReDim Preserve可能会造成损失。

要回答你的问题,假装你需要build立一个HTML文件的一部分。 你可以像这样使用显示的string类:

 Dim sb Set sb = New StringBuilder ' Guessing here. You haven't shown the class name. sb.Append "some string" sb.Append "another string" sb.Append "a third string" .... sb.Delimiter = "<br>" myHtmlFile.Write sb.ToString() 

将打印以下内容:

 some string<br>another string<br>a third string 

这是一般的想法。 避免使用&尽可能多的使用数组,你应该看到一些显着的性能改进。

我不知道我跟着你的问题,因为VBA没有string生成器。 string可以简单地build立。

 Dim strTemp as string Dim strCountry as string strCountry = "Nowhere" strTemp = "I am from " & strCountry 

我同意@MatthewD,但如果你正在做这个练习,我会添加一些更多的信息。

这里有一些关于在 Chip Pearson伟大的站点上声明variables和在VBA中使用类的链接。

您需要将新的类模块添加到您的VBA项目并粘贴您的代码。 小心 – 你的语音标记“可能需要被replace,他们已经被改造成了一个类似的外观但是不同的字符。改变类模块的名字为”StringBuilder“,然后你可以使用代码这样的普通模块:

 Sub test1() Dim strBld As StringBuillder Set strBld = New StringBuillder strBld.Append "Hello" strBld.Append " world" strBld.Append "!" Debug.Print strBld.ToArray(0) Debug.Print strBld.ToString End Sub