2016-02-01 2 views
0

У меня есть пользовательский ввод для файла excel, который мне нужно выводить на txt. Это называется csv, однако делимметр не является ";" но "|" поэтому мне нужно создать файл самостоятельно.EXCEL VBA Заменить последнюю строку cr + lf с lf

Я в конечном итоге создал файл, но мне нужно, чтобы каждая строка заканчивалась линией перевода, и она выполняет задание, но в конце созданного файла есть пустая строка с carriege return и line feed.

Как я могу остановить это или удалить последнюю строку с crlf ??

Функции здесь не мой дизайн Я просто отказался от того, что нашел в другом месте.

Теперь я использую это:

Sub CreateAfile() 

rok = Format(Date, "yyyy") 
Mesic = Format(Date, "mm") 
dnes = Format(Date, "dd") 
cesta = "\\somepath\" 
plnacesta = cesta & "Data_" & rok & Mesic & dnes & "_0001" & ".csv" 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Dim pth As String 
pth = ThisWorkbook.Path 
Dim fs As Object 
Set fs = CreateObject("Scripting.FileSystemObject") 
Dim a As Object 
If myFileExists(plnacesta) Then 
MsgBox "Existuje!" 
Exit Sub 
Else 
End If 
Set a = fs.CreateTextFile(plnacesta, True) 
Dim sh As Worksheet 
Set sh = ThisWorkbook.Sheets("Výsledek") 

Dim rng As Range 
Set rng = sh.UsedRange 
Dim sRange As String 
sRange = GetTextFromRangeText(rng) 
Call a.WriteLine(sRange) 
'Call a.WriteLine(sRange) 
a.Close 

End Sub 

Function myFileExists(ByVal strPath As String) As Boolean 
'Function returns true if file exists, false otherwise 
If Dir(strPath) > "" Then 
    myFileExists = True 
Else 
    myFileExists = False 
End If 
End Function 

Function GetTextFromRangeText(ByVal poRange As Range) As String 
Dim vRange As Variant 
Dim sRet As String 
Dim i As Integer 
Dim j As Integer 

If Not poRange Is Nothing Then 

    vRange = poRange 

    For i = LBound(vRange) To UBound(vRange) 
     For j = LBound(vRange, 2) To UBound(vRange, 2) 
      sRet = sRet & vRange(i, j) 
     Next j 
     sRet = sRet & vbLf 
    Next i 
End If 

GetTextFromRangeText = sRet 
End Function 

ответ

0

Я пустошь предлагаю добавить, если условие

For i = LBound(vRange) To UBound(vRange) 
    For j = LBound(vRange, 2) To UBound(vRange, 2) 
     sRet = sRet & vRange(i, j) 
    Next j 
    If(i<> UBound(vRange)) Then 
     sRet = sRet & vbNewLine 
    End If 
Next i 
+0

Это удалило последнюю пустую строку с cr + lf. Однако последняя строка заканчивается на cr + lf вместо lf. – Savol

1

решаемые его вместо

Call a.WriteLine(sRange) 

должно быть

Call a.Write(sRange) 

Поскольку запись не добавляет разрыва строки

Смежные вопросы