Удаление пустых строк из конца файла CSV в Excel или пошаговое выполнение макроса с помощью переменных шагов? - PullRequest
0 голосов
/ 01 июля 2019

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

Затем у меня есть приведенный ниже код, который изначально был построенс помощью людей, работающих здесь, чтобы проработать и создать csv-файлы для каждого dim rowinfile.

При создании листа я думал, что это будет работать, но после его построения немного больше, длина данных может варьироваться,и число строк, необходимое для каждого файла CSV, может варьироваться, поэтому, например, у меня может быть вкладка, которая имеет 6 строк данных, которые необходимо преобразовать в один файл CSV, или содержит 100 строк данных, которые необходимо преобразовать в8 CSV-файлов.

Первоначально я думал, что я просто поместил бы данные в худшем случае, скажем, 30 строк, и чтобы макрос создал файл CSV, как это, но программа, которую мне нужно загрузить в CSV-файлы, будетне работает, если в конце csv есть пустые строки.

Итак ... Мне либо нужен способ удаления блаnk строк в конце каждого CSV, который, когда используется диапазон, много больше, чем число строк, в которых есть данные (из-за количества ячеек, которые должны иметь формулу агрегирования, и даже если я перенесу агрегат в"если результат = ничего, то" "" CSV по-прежнему видит строку с "" в качестве строки)

или

Мне нужен способ изменить мой код, чтобы он проходил через создание отдельногоCSV-файлы, основанные на серии переменных, то есть создать CSV-файл с 6 строками (я могу получить это число из ячейки в соответствии с моим последним кодом ниже), но не могу понять, как затем перейти и изменить этот ссылочный номер на другую ячейкуна каждом проходе?

Уверен, что переход с переменной длины проще, но мне не хватает навыков самому его отработать.

Спасибо !!



'resets used range to try and stop creating blank csv files
a = ActiveSheet.UsedRange.Rows.Count

Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range
Dim WorkbookCounter As Integer
Dim RowsInFile


Application.ScreenUpdating = True


'Initialize data
Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = 1
WorkbookCounter = 1
RowsInFile = Sheets("Upload").Cells(1, 4).Value     '10     'how many rows (incl. header) in new files?

For p = 1 To ThisSheet.UsedRange.Rows.Count Step RowsInFile

    'Paste the chunk of rows for this file
    Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + RowsInFile - 1, NumOfColumns))


    xName = ThisWorkbook.Path & "\Files for upload testing\" & "Purchase" & Format(Now(), "yyyymmddhhmmss") & ".csv"

    Application.Wait (Now + TimeValue("0:00:02"))



    Open xName For Output As #1
    For Each xRow In RangeToCopy.Rows


        xStr = ""
      For Each xCell In xRow.Cells
           xStr = xStr & xCell.Value & Chr(9)
        Next
        While Right(xStr, 1) = Chr(9)
            xStr = Left(xStr, Len(xStr) - 1)
        Wend
        Print #1, xStr


    Next

    Close #1

    'Increment file counter
    WorkbookCounter = WorkbookCounter + 1
Next p

Application.ScreenUpdating = True
Set wb = Nothing

End Sub

1 Ответ

0 голосов
/ 01 июля 2019

Я не могу понять, сколько столбцов вы пытаетесь скопировать, или это не так.

Но вместо того, чтобы пытаться удалить пустые строки, просто не пишите их.

Это не лучший способ сделать это, но будет работать с вашим кодом.

For Each xRow In RangeToCopy.Rows
    Dim writeThisLine As Boolean
    writeThisLine = False
    xStr = ""
    For Each xcell In xRow.Cells
        If xcell.Text <> "" Then writeThisLine = True
        xStr = xStr & xcell.Value & Chr(9)
    Next
    While Right(xStr, 1) = Chr(9)
        xStr = Left(xStr, Len(xStr) - 1)
    Wend
    If writeThisLine Then Print #1, xStr
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...