Como otros han señalado, cada concatenación de cadenas en Visual Basic se asignará una nueva cadena y luego copiar los datos a lo largo y luego desasignar el original una vez que se pueda. En un ciclo esto puede causar problemas.
Para evitar este puede crear una clase StringBuilder sencilla como ésta:
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
Esta clase reducirá al mínimo el número de asignaciones de cadena forzando la cadena que se construirá con espacios en él y luego sobrescribir el espacios según sea necesario. Se vuelve a asignar a aproximadamente el doble de su tamaño cuando descubre que no tiene suficiente espacio preinicializado. El método de texto devolverá la parte de la cadena que realmente se usa.
¿Podría pegar el código alrededor de la línea que devuelve el error? – Robit
Las declaraciones de las variables involucradas también podrían ser útiles – Robit