I have a text file that is formatted in the following way:

And I am using the below code in VBA to write the text file into excel:
Sub Test()
 Dim Fn As String, WS As Worksheet, st As String
 Fn = "Path.txt" ' the file path and name
 Set WS = Sheets("Sheet1")
 'Read text file to st string
 With CreateObject("Scripting.FileSystemObject")
    If Not .FileExists(Fn) Then
        MsgBox Fn & "  : is missing."
        Exit Sub
    Else
        If FileLen(Fn) = 0 Then
            MsgBox Fn & "  : is empty"
            Exit Sub
        Else
            With .OpenTextFile(Fn, 1)
             st = .ReadAll
             .Close
            End With
        End If
    End If
 End With
 'Replace every two or more space in st string with vbTab
 With CreateObject("VBScript.RegExp")
  .Pattern = "[ ]{2,}"
  .Global = True
  .Execute st
  st = .Replace(st, vbTab)
 End With
 'Put st string in Clipboard
 With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    .SetText st
    .PutInClipboard
 End With
 'Paste Clipboard to range
 WS.Range("A1").PasteSpecial
End Sub
My goal is to preserve the columns from the text file in Excel.
However, my code can't tell that a blank space under Plan Type and a blank space under Benefit Plan are actually two different columns of data. It treats the blank space under the two columns as one long blank space, and the formatting isn't preserved. 
Visually we know there are columns, but my code cannot see this.
Is there a way to program this so it recognizes that there are two spaces in the text file instead of one big space?
What I want to avoid is having to manually deliminate this with a character. Is that possible?
Assuming that each column is 10 characters long, I would use this width instead of a space delimeter
Sub FeedTextFileToActiveSheet(ByVal TextFile As String)
  Dim i As Integer, Line As String
  Open TextFile For Input As #1
  While Not EOF(#1)
    i = i + 1
    Input #1, Line
    Range("A" & i) = Trim(Mid(Line, 1, 10))  'Business ID
    Range("B" & i) = Trim(Mid(Line, 11, 10)) 'Employee ID
    ' ... and so on
  Wend
  Close #1
End Sub
To use it, just call FeedTextFileToActiveSheet("Path.txt")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With