gpt4 book ai didi

vba - 使用预制的 Stringbuilder 类

转载 作者:行者123 更新时间:2023-12-02 09:57:56 24 4
gpt4 key购买 nike

我正在尝试学习如何在 VBA 中使用字符串生成器函数,但在 VBA 中查找有关如何使用它们的资源时遇到困难。我可以使用一些帮助来使用预制的 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 中的字符串连接 (&) 是出了名的慢,因此如果您需要组合大量字符串,通常会使用像这样的“stringbuilder”类来加速该过程。

总体思路是使用 Array() 存储各个字符串组件,然后在需要时使用 Join 将所有字符串组合一次 () 函数。添加字符串时,数组会自动调整大小。许多人使用“GrowBy”功能(尽管这个没有)在达到数组限制时按静态大小或因子增长数组。这也可以提高性能,因为每次插入字符串时调用 ReDim Preserve 都会产生影响。

要回答您的问题,假设您需要构建 HTML 文件的一部分。您可以像这样使用显示的字符串类:

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 - 使用预制的 Stringbuilder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31787570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com