UsedRange - не может удалить завершающую пустую строку - PullRequest
1 голос
/ 27 марта 2019

Принимаются ответы как VBA, так и не VBA.

Проблема

Я пытаюсь сохранить лист в формате .csv, используя ThisWorkbook.SaveAs Filename:=strFilePath, FileFormat:=xlCSV, но посколькуUsedRange включает в себя завершающую пустую строку, я получаю нежелательную строку запятых в .csv.

То, что я сделал заранее в Коде

rngAllDate.SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Worksheets(1).Cells(1, 1)

Это может быть полезно, если вы пытаетесь воссоздать проблему.

Что я пробовал

  • Удаление всех строк под моими данными
  • Использование инструмента ластика для очистки всех строк во всех моих данных
  • Удаление форматов со всего моего листа, включая мои данные, в случае, если границы вызвали проблему
  • Использование следующего VBAкодовый блок:

With ThisWorkbook.Worksheets(1)
    .UsedRange 'I'm told this recomputes the UsedRange
    MsgBox .UsedRange.Address

    Dim rngColumnsToDeleteAndClear As Range
    Set rngColumnsToDeleteAndClear = .Range(.Cells(1, WorksheetFunction.CountA(.Rows(1)) + 1), .Cells(1, .Columns.Count))
    MsgBox rngColumnsToDeleteAndClear.Address
    rngColumnsToDeleteAndClear.EntireColumn.Clear
    rngColumnsToDeleteAndClear.EntireColumn.Delete

    Dim rngRowsToDeleteAndClear As Range
    Set rngRowsToDeleteAndClear = .Range(.Cells(WorksheetFunction.CountA(.Columns(1)) + 1, 1), .Cells(.Rows.Count, 1))
    MsgBox rngRowsToDeleteAndClear.Address
    rngRowsToDeleteAndClear.EntireRow.Clear
    rngRowsToDeleteAndClear.EntireRow.Delete

    .UsedRange
    MsgBox .UsedRange.Address
End With

Я получаю следующие результаты Msgbox из вышеуказанного кодового блока:

  1. $ A $ 1: $ N $ 11
  2. $ O $ 1: $ XFD $ 1
  3. $ A $ 11: $ A $ 1048576
  4. $ A $ 1: $ N $ 11

Я ожидаю следующее сообщение MsgboxРезультаты из вышеупомянутого codeblock:

  1. $ A $ 1: $ N $ 11
  2. $ O $ 1: $ XFD $ 1
  3. $ A $ 11: $ A 1048576
  4. $ A $ 1: $ N $ 10

Что еще можно попробовать?

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

попробуйте выполнить это, чтобы увидеть, есть ли какие-либо скрытые разрывы в строке 11, непосредственно перед вычислением этого используемого диапазона

Sub IterateCharacters()
    For Each cell In Sheets("Sheet1").Range(Cells(11, 1), Cells(11, 14))
        With cell
            For n = 1 To Len(.Value)
                Debug.Print Asc(Mid(.Value, n, 1))
            Next n
        End With
    Next
End Sub

Кроме того, попробуйте строку ниже сразу после получения неверного используемого диапазона, затем протестируйтеснова использовал диапазон.

ActiveSheet.Range(Cells(11, 1), Cells(11, 14)).Replace "*", vbNullString
0 голосов
/ 27 марта 2019

По какой-то причине форматирование фактического диапазона данных приводило к тому, что UsedRange включал пустую строку в конце. Для записи я использовал «толстую рамку» вокруг диапазона данных.

После удаления форматов из диапазона данных показалось , что пустая строка все еще включается в UsedRange, как я уже говорил, я проверял выше, потому что когда я нажимал Ctrl-Shift-End, выделенная область все еще содержала пустую строку. Однако VBA показывает, что фактический UsedRange фактически сократился до строки 10 из строки 11.

0 голосов
/ 27 марта 2019

Недавно у меня возникла проблема с UsedRange в электронной таблице, и я не смог удалить / очистить ячейки и заставить переустановить UsedRange.Исправление, которое я нашел, состояло в том, чтобы выбрать все неиспользуемые строки / столбцы, изменить их размер, теперь удалить ячейки, сохранить электронную таблицу и бум, когда использованный диапазон был сброшен ... Может быть, это поможет вам?

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