Out of String Space in Visual Basic 6
Text found on MSDN:
http://msdn.microsoft.com/en-us/library/aa264524(VS.60).aspx
Visual Basic for Applications Reference Out of string space (Error 14)
Specifics
Visual Basic permits you to use very large strings. However, the requirements of other programs and the way you manipulate your strings may cause this error. This error has the following causes and solutions:
- Expressions requiring that temporary strings be created for evaluation may cause this error. For example, the following code causes an Out of string space error on some operating systems:
MyString = "Hello"
For Count = 1 To 100
MyString = MyString & MyString
Next Count
Assign the string to a variable of another name. * Your system may have run out of memory, which prevented a string from
being allocated.
Remove any unnecessary applications from memory to create more space.
For additional information, select the item in question and press F1.
As others have pointed out, every string concatenation in VB will allocate a new string and then copy the data over and then de-allocate the original once it can. In a loop this can cause issues.
To work around this you can create a simple StringBuilder class like this one:
Option Explicit
Private data As String
Private allocLen As Long
Private currentPos As Long
Public Function Text() As String
Text = Left(data, currentPos)
End Function
Public Function Length() As Long
Length = currentPos
End Function
Public Sub Add(s As String)
Dim newLen As Long
newLen = Len(s)
If ((currentPos + newLen) > allocLen) Then
data = data & Space((currentPos + newLen))
allocLen = Len(data)
End If
Mid(data, currentPos + 1, newLen) = s
currentPos = currentPos + newLen
End Sub
Private Sub Class_Initialize()
data = Space(10240)
allocLen = Len(data)
currentPos = 1
End Sub
This class will minimize the number of string allocations by forcing the string to be built with spaces in it and then overwriting the spaces as needed. It re-allocates to roughly double its size when it finds that it does not have enough space pre-initialized. The Text method will return the portion of the string that is actually used.