2012-01-05 4 views
3

У меня есть книга, которую я экспортирую в текстовый файл, используя приведенный ниже скрипт. Он отлично работает, но когда я открываю текстовый файл, в конце всегда есть пустая строка, из-за которой возникают проблемы с другим скриптом, который я запускаю после того, как я сгенерировал этот текстовый файл. Любая помощь вообще о том, как я могу удалить пустую строку из моего экспорта.Excel VBA Экспорт в текстовый файл. Нужно удалить пустую строку

Код:

Sub Rectangle1_Click() 
    Application.DisplayAlerts = False 

' Save file name and path into a variable 
    template_file = ActiveWorkbook.FullName 

' Default directory would be c:\temp. Users however will have the ability 
' to change where to save the file if need be. 

     fileSaveName = Application.GetSaveAsFilename(_ 
     InitialFileName:="C:\users\%username%\SNSCA_Customer_" + _ 
     VBA.Strings.Format(Now, "mmddyyyy") + ".txt", _ 
     fileFilter:="Text Files (*.txt), *.txt") 

    If fileSaveName = False Then 
     Exit Sub 
    End If 

    ' Save file as .txt TAB delimited fileSaveName, FileFormat:=36, 

     ActiveWorkbook.SaveAs Filename:= _ 
     fileSaveName, FileFormat:=xlTextWindows, _ 
     CreateBackup:=False 

     file_name_saved = ActiveWorkbook.FullName 
    MsgBox "Your SNSCA configuration upload file has been " _ 
     & "successfully created at: " & vbCr & vbCr & file_name_saved 

End Sub 

Edit ...

Вот альтернативный, который не работает либо:

Sub Rectangle1_Click() 
    Dim fPath As String 
    Dim exportTxt As String 
    fPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Sample_" & Format(Now(), "HHNNSS") & ".txt" 

    exportTxt = ActiveWorkbook. 

    Open fPath For Append As #1 'write the new file 
    Print #1, exportTxt; 
    Close #1 
End Sub 
+0

Это может происходить по многим причинам в данном входе первенствовать документ. Но вы можете прочитать файл сразу после сохранения и удаления лишних строк. –

+2

Я бы сказал, что ваш другой скрипт слишком чувствителен ... Измените его, чтобы он не задохнулся на задней пустой строке! –

+0

Я пытался изменить способ экспорта активного листа VBA, но это, похоже, не работает. Я не могу получить приведенную ниже переменную exporttxt, чтобы сохранить как содержимое активного листа, так и все, что было опубликовано выше. – user1132827

ответ

0

В то время как я upticked комментарий от Жан-Франсуа Корбетта вас можно использовать этот VBA ниже, чтобы удалить последнюю строку вашего txt-файла (как вы сказали, пустая строка записывается при сохранении этого способа).

Этот VBA основан на обычно используемой процедуре . Это

  • считывает вновь созданного текстового файла, например (* SNSCA_Customer_01092012.txt *)
  • разделяет его построчно
  • затем переписывает все строки, за исключением последнего в новый текстовый файл (* SNSCA_Customer_01092012clean.txt *)

    Sub Rectangle1_Click() 
    Dim strTemplateFile As String 
    Dim strFname As String 
    Dim strFnameClean As String 
    Dim FileSaveName 
    
    Application.DisplayAlerts = False 
    ' Save file name and path into a variable 
    strTemplateFile = ActiveWorkbook.FullName 
    
    ' Default directory would be c:\temp. Users however will have the ability 
    ' to change where to save the file if need be. 
    
    FileSaveName = Application.GetSaveAsFilename(_ 
           InitialFileName:="C:\users\%username%\SNSCA_Customer_" + _ 
               VBA.Strings.Format(Now, "mmddyyyy") + ".txt", _ 
           fileFilter:="Text Files (*.txt), *.txt") 
    
    If FileSaveName = False Then 
        Exit Sub 
    End If 
    
    ' Save file as .txt TAB delimited fileSaveName, FileFormat:=36, 
    ActiveWorkbook.SaveAs Filename:= _ 
             FileSaveName, FileFormat:=xlTextWindows, _ 
             CreateBackup:=False 
    
    strFname = ActiveWorkbook.FullName 
    strFnameClean = Replace(ActiveWorkbook.FullName, ".txt", "clean.txt") 
    MsgBox "Your SNSCA configuration upload file has been " _ 
        & "successfully created at: " & vbCr & vbCr & strFname 
    Call Test(strFname, strFnameClean) 
    End Sub 
    
    
    Sub Test(ByVal strFname, ByVal strFnameClean) 
    Const ForReading = 1 
    Const ForWriting = 2 
    
    Dim objFSO As Object 
    Dim objTF As Object 
    Dim strAll As String 
    Dim varTxt 
    Dim lngRow As Long 
    
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objTF = objFSO.OpenTextFile(strFname, ForReading) 
    strAll = objTF.readall 
    objTF.Close 
    Set objTF = objFSO.createTextFile(strFnameClean, ForWriting) 
    varTxt = Split(strAll, vbCrLf) 
    For lngRow = LBound(varTxt) To UBound(varTxt) - 1 
        objTF.writeline varTxt(lngRow) 
    Next 
    objTF.Close 
    End Sub 
    
Смежные вопросы