I am experiencing an unexpected vb limitation on the string max size, as explained in this post: VBA unexpected reach of string size limit
While I was expecting to be able to load files up to 2GB (2^31 char) using open path for binary and get function, I get an out of string space error when I try to load a string larger than 255,918,061 characters.
I managed to work around this issue buffering the input stream of get. The problem is that I need to load the file as an array of string by splitting the buffer on vbCrLf characters. 
This requires then to build the array line by line. Moreover, since I cannot be sure whether the buffer is ending on a break line or not I need additional operations. This solution is Time and Memory consuming. Loading a file of 300MB with this code costs 900MB (!) use of memory by excel. Is there a better solution ?
Here bellow is my code:
Function Load_File(path As String) As Variant
Dim MyData As String, FNum As Integer
Dim LenRemainingBytes As Long
Dim BufferSizeCurrent As Long
Dim FileByLines() As String
Dim CuttedLine As Boolean
Dim tmpSplit() As String
Dim FinalSplit() As String
Dim NbOfLines As Long
Dim LastLine As String
Dim count As Long, i As Long
Const BufferSizeMax As Long = 100000
FNum = FreeFile()
Open path For Binary As #FNum
LenRemainingBytes = LOF(FNum)
NbOfLines = FileNbOfLines(path)
ReDim FinalSplit(NbOfLines)
CuttedLine = False
Do While LenRemainingBytes > 0
    MyData = ""
    If LenRemainingBytes > BufferSizeMax Then
        BufferSizeCurrent = BufferSizeMax
    Else
        BufferSizeCurrent = LenRemainingBytes
    End If
    MyData = Space$(BufferSizeCurrent)
    Get #FNum, , MyData
    tmpSplit = Split(MyData, vbCrLf)
    If CuttedLine Then
        count = count - 1
        tmpSplit(0) = LastLine & tmpSplit(0)
        For i = 0 To UBound(tmpSplit)
            If count > NbOfLines Then Exit For
            FinalSplit(count) = tmpSplit(i)
            count = count + 1
        Next i
    Else
        For i = 0 To UBound(tmpSplit)
            If count > NbOfLines Then Exit For
            FinalSplit(count) = tmpSplit(i)
            count = count + 1
        Next i
    End If
    Erase tmpSplit
    LastLine = Right(MyData, Len(MyData) - InStrRev(MyData, vbCrLf) - 1)
    CuttedLine = Len(LastLine) > 1
    LenRemainingBytes = LenRemainingBytes - BufferSizeCurrent
Loop
Close FNum
Load_File = FinalSplit
Erase FinalSplit
End Function
Where the function FileNbOfLines is efficiently returning the number of line break characters.
Edit:
My Needs are:
- To look for a specific string within the file
- To get a specific number of lines coming after this string
 
     
    