使用预制的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