Excel csv xóa các hàng trống

Chúng tôi có một tập lệnh để xuất một trang tính cụ thể sang một trang tính mới. csv. Vấn đề là. csv đang lấy các ô có công thức và đánh giá nó dưới dạng một chuỗi trống.

Đây là kịch bản của chúng ta.

Mã VBA.

Public Sub ExportWorksheetAndSaveAsCSV()

Dim wbkExport As Workbook
Dim shtToExport As Worksheet

Set shtToExport = ThisWorkbook.Worksheets("UploadTemplate")     'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
xStrDate = Format(Now, "yyyy-mm-dd hh-mm-ss")
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False                       'Possibly overwrite without asking
wbkExport.SaveAs Filename:="L:\Human Resources\Y drive files\ADPUpload - " & xStrDate & ".csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False

End Sub


Đây là giao diện khi chúng tôi mở tệp của mình



The system we are uploading to does not like the empty rows shown in the red box. The sheet can have anywhere from rows 40-200 populated each week, so we copied our formula down to row 200, and the empty rows are what we want to not export.

Is there a way to modify our script to ignore rows in the sheet that have a formula but have no real data when exporting?

 

Tôi tin rằng nó phụ thuộc vào những gì được coi là PHẠM VI ĐÃ SỬ DỤNG của bạn. Vì các ô đó chứa các giá trị hoặc công thức nên nó trở thành một phần của tệp xuất CSV vì nó được SỬ DỤNG hoặc chiếm dụng.
Đề xuất của tôi là Sao chép & Dán dưới dạng giá trị để xóa công thức, sau đó xóa cả Hàng trống. Nếu điều này nghe có vẻ ổn. . Sau đó thử kịch bản dưới đây.

Mã VBA.

Public Sub ExportWorksheetAndSaveAsCSV()

Dim wbkExport As Workbook
Dim shtToExport As Worksheet

Set shtToExport = ThisWorkbook.Worksheets("UploadTemplate")     'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
xStrDate = Format(Now, "yyyy-mm-dd hh-mm-ss")
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False                       'Possibly overwrite without asking
'-----Added script
    With wbkExport.Worksheets("UploadTemplate")
    'Paste values - remove formulas
        .Activate
        .Cells.Copy
        .Cells.PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    'Delete Empty rows
        Dim LastRowIndex As Integer
        Dim RowIndex As Integer
        Dim UsedRng As Range
        Set UsedRng = ActiveSheet.UsedRange
        LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
        For RowIndex = LastRowIndex To 1 Step -1
            If Application.CountA(Rows(RowIndex)) = 0 Then
                Rows(RowIndex).Delete
            End If
        Next RowIndex
    End With
'-------Back to original script
wbkExport.SaveAs Filename:="L:\Human Resources\Y drive files\ADPUpload - " & xStrDate & ".csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False

End Sub

 

bstory84 anh ấy nói

Tôi tin rằng nó phụ thuộc vào những gì được coi là PHẠM VI ĐÃ SỬ DỤNG của bạn. Vì các ô đó chứa các giá trị hoặc công thức nên nó trở thành một phần của tệp xuất CSV vì nó được SỬ DỤNG hoặc chiếm dụng.
Đề xuất của tôi là Sao chép & Dán dưới dạng giá trị để xóa công thức, sau đó xóa cả Hàng trống. Nếu điều này nghe có vẻ ổn. . Sau đó thử kịch bản dưới đây.

Mã VBA.

Public Sub ExportWorksheetAndSaveAsCSV()

Dim wbkExport As Workbook
Dim shtToExport As Worksheet

Set shtToExport = ThisWorkbook.Worksheets("UploadTemplate")     'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
xStrDate = Format(Now, "yyyy-mm-dd hh-mm-ss")
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False                       'Possibly overwrite without asking
'-----Added script
    With wbkExport.Worksheets("UploadTemplate")
    'Paste values - remove formulas
        .Activate
        .Cells.Copy
        .Cells.PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    'Delete Empty rows
        Dim LastRowIndex As Integer
        Dim RowIndex As Integer
        Dim UsedRng As Range
        Set UsedRng = ActiveSheet.UsedRange
        LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
        For RowIndex = LastRowIndex To 1 Step -1
            If Application.CountA(Rows(RowIndex)) = 0 Then
                Rows(RowIndex).Delete
            End If
        Next RowIndex
    End With
'-------Back to original script
wbkExport.SaveAs Filename:="L:\Human Resources\Y drive files\ADPUpload - " & xStrDate & ".csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False

End Sub

Bấm để mở rộng

Cảm ơn bạn đã đề xuất. Tôi xin lỗi vì đã mất quá nhiều thời gian để làm điều này, tôi đã bị kéo sang một dự án khác vì vậy tôi chỉ quay lại chủ đề này.

Rất tiếc, tập lệnh bạn cung cấp không hoạt động. Khi chúng tôi mở. csv là notepad, nó vẫn có tất cả các hàng trống trong công thức. Cũng mất nhiều thời gian để chạy (hơn 60 giây). Tôi nghĩ rằng phương pháp sao chép và sau đó dán các giá trị là cách chính xác để làm điều đó.

Một lần nữa xin cảm ơn. Chúng tôi sẽ tiếp tục tìm cách để hoàn thành việc này.