2016-04-26 2 views
0

Я хочу задать один вопрос. Я написал простой код, в котором я нажимаю кнопку «Сохранить», а затем сохраняю файл Excel в «C: \ new folder». Теперь проблема заключается в том, как сохранить последнюю строку исходного листа excel в «C: \ new folder \», если я добавлю новую строку в оригинальный лист excel. Я хочу, чтобы лист был сохранен, чтобы содержать только один ряд, от оригинального листа excel.Как сохранить только последнюю строку данных excel в excel vb?

Sub Increment() 
    Range("A1").Value = Range("A1").Value + 1 
End Sub 

Private Sub CommandButton1_Click() 

    Dim Path As String 
    Dim FileNane1 As String 
    Dim FileName2 As String 
    Path = "C:\new folder\" 
    Call Increment 
    FileNane1 = Range("A1").Value 
    FileName2 = Range("B1") 

    ActiveWorkbook.SaveAs Filename:=Path & FileNane1 & "-" & FileName2 & ".xls" 

End Sub 

Вышеупомянутый сохраняет весь лист Excel в папке «C: \ new», где мне нужна только последняя строка.

Как я могу это решить?

+0

Создать новую книгу, вытащить последнюю строку из исходной книги, за исключением нового книга. – findwindow

ответ

-1

Я немного запутался в том, что вы хотите сделать, но это должно стать очень близким (если я правильно понимаю). Это выберет последнюю строку текста, предполагая, что в столбце A между A1 и последней строкой нет пустых ячеек.

Sub SaveLastLine() 

    'Variable declaration 
     Dim WB As Workbook, _ 
      filename As String 

     'Turn off screen updating and alerts 
     Application.ScreenUpdating = False 
     Application.DisplayAlerts = False 
     'Make a copy of the last line of active sheet 
     newName = ActiveSheet.Name 
     Range("A1").Select 
     Selection.End(xlDown).Select 
     Range(Selection, Selection.End(xlToRight)).Select 
     Selection.Copy 
     Workbooks.Add 
     ActiveSheet.Paste 
     Cells.Select 
     Cells.EntireColumn.AutoFit 
     Range("A1").Select 
     Set WB = ActiveWorkbook 
     filename = newName & ".xlsx" 
     WB.SaveAs filename:="C:\New Folder\" & filename, FileFormat:=51 

     'Restore screen updating and alerts 
     Application.DisplayAlerts = True 
     Application.ScreenUpdating = True 

End Sub 
+0

вам не нужно использовать так много 'select', плохая привычка, поступающая из макрорекордера ... –

+0

Спасибо за ваш ответ, это полезно, но у меня все еще есть ошибка в строке Cells.Select в приведенных выше кодах. Когда я нажимаю кнопку «Сохранить», меня просят отладить, если да, появляется сообщение об ошибке «Ошибка времени выполнения» 1004: выбор метода класса Range не удался. За исключением того, что он копирует последнюю строку правильно, но не сохраняет ее в «C: \ New Folder \». Есть ли кто-то, кто может помочь нам решить этот вопрос ?. –

0

Хотя это звучит как код Грега может работать для вас (при условии, что вы поняли, почему файл не был правильно экономить) является более эффективным, чтобы избежать использования метода .Select кроме случаев, когда это абсолютно необходимо.

Вы были очень близки к функциональным с исходным кодом, и может делать то, что вы хотите, добавив только четыре строки в исходном коде:

Private Sub CommandButton1_Click() 

    Dim Path As String 
    Dim FileName1 As String 
    Dim FileName2 As String 

    Path = "C:\new folder\" 
    Call Increment 
    FileName1 = Range("A1").Value 
    FileName2 = Range("B1") 

    '~~>find and copy the last row 
     Range("A" & ActiveSheet.Rows.Count).End(xlUp).EntireRow.Copy 

    '~~>add a new workbook and paste the content before saving 
     Workbooks.Add 
     ActiveWorkbook.ActiveSheet.PasteSpecial 

    ActiveWorkbook.SaveAs filename:=Path & FileName1 & "-" & FileName2 & ".xls" 

    '~~>close the new workbook 
     ActiveWorkbook.Close (False) 

End Sub