Getting an Extra Empty line when exporting Excel Range to .txt file

前端 未结 2 1153
挽巷
挽巷 2021-01-23 03:06

I am trying to copy an Excel range to a .txt file.

The export is successful, with one exception, It adds one \"extra\" empty line at the end.

I\

相关标签:
2条回答
  • 2021-01-23 03:33

    Try using a ; on the last print line.

    ' === Export to the .txt file ===
    Dim TxtFileName As String, lineText As String
    
    TxtFileName = ThisWorkbook.Path & "\Inv_" & Format(Date, "yyyymmdd") & ".txt"
    
    Open TxtFileName For Output As #1
    With StockSht
        For i = 1 To LastRow
            For j = 1 To 3
                If j = 3 Then
                    lineText = lineText & .Cells(i, j).Value2
                Else ' j = 1 or 2
                    lineText = lineText & .Cells(i, j).Value2 & vbTab
                End If
            Next j
            If i = LastRow Then
                Print #1, lineText;
            Else
                Print #1, lineText
            End if
            lineText = ""
        Next i
    End With
    Close #1
    
    0 讨论(0)
  • 2021-01-23 03:59

    You can use a semi-colon in the Print statement to control the insertion point (i.e. prevent the line-feed on the last line).

    The relevant bit on the MSDN page:

    Use a semicolon to position the insertion point immediately after the last character displayed.

    I tested this code:

    Sub PrintTest()
    
        Dim lng As Long
    
        Open "C:\foo3.txt" For Output As #1
    
        For lng = 1 To 10
            If lng < 10 Then
                Print #1, "foo" & lng
            Else
                Print #1, "foo" & lng; '<-- semi-colon prevents the newline
            End If
        Next lng
    
        Close #1
    
    End Sub
    

    So I would update your code like below (not tested):

    ' === Export to the .txt file ===
    Dim TxtFileName As String, lineText As String
    
    TxtFileName = ThisWorkbook.Path & "\Inv_" & Format(Date, "yyyymmdd") & ".txt"
    
    Open TxtFileName For Output As #1
    With StockSht
        For i = 1 To LastRow
            For j = 1 To 3
                If j = 3 Then
                    lineText = lineText & .Cells(i, j).Value2
                Else ' j = 1 or 2
                    lineText = lineText & .Cells(i, j).Value2 & vbTab
                End If
            Next j
    
            '--- new bit: check for i against LastRow and add the semicolon on last row
            If i <> LastRow Then
                Print #1, lineText
            Else
                Print #1, lineText; '<-- semi colon keeps insertion point at end of line
            End If
    
    
            lineText = ""
        Next i
    End With
    Close #1
    
    0 讨论(0)
提交回复
热议问题