Excel VBA: столбцы заполнены невидимым содержимым до конца (столбец 16,384) - PullRequest
0 голосов
/ 25 мая 2018

У меня есть файл Excel для бюджетирования с большим количеством программирования на VBA в фоновом режиме.Файл позволяет выполнять различные операции импорта / экспорта и работает достаточно хорошо, но как только количество проектов (в каждом проекте по 15 листов) становится слишком большим, оно становится грязным.

Часто я получаю сообщение об ошибкесообщение с надписью «Невозможно сдвинуть объект с листа» или «В Excel слишком мало ресурсов для выполнения задачи».В обоих случаях Google говорит, что проблема в том, что я превышаю максимальное количество столбцов или строк.И это правда - если я запускаю макрос, чтобы найти мой последний столбец с содержимым, он возвращает 16 384.

Но я помещаю данные только в столбцы от A до BA ... как для строк, максимальная строка с содержимым2000Я не вижу никакого контента, у меня нет макроса, ссылающегося на «lastrow / lastcolumn» ... понятия не имею, что происходит.И иногда я могу вручную удалить кучу строк и столбцов, и тогда это работает;иногда мне приходится вручную воссоздавать рабочую книгу.

Я знаю, что это очень смутное объяснение, но у меня за спиной примерно 15 000 строк кода, поэтому объяснить его довольно сложно.

Может быть, кто-то еще можетпомощь.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Большое спасибо, я сохраню новый код в следующий раз!В конце концов, исходный код работал на 90% моих листов, а остальное я обработал вручную (удалив все столбцы из BX до конца, сохранив, закрыв и снова открыв файл).

0 голосов
/ 25 мая 2018

Это распространенная проблема с файлами Excel.Если UsedRange выходит за границы, файл становится раздутым без видимой причины.

Это должно исправить это:

Sub ResetUsedRange()

    Dim sht As Worksheet

    Dim lng As Long

    For Each sht In ActiveWorkbook.Worksheets

        lng = sht.UsedRange.Rows.Count

    Next

End Sub

Если по какой-то причине это не поможетпросто попробуйте вручную удалить все пустые строки / столбцы в нижней / правой части области данных, нажмите «Сохранить» и проверьте размер файла.

Код взят из здесь .

Редактировать # 1

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

Sub DeleteBlankRowsAndColumnsAndResetUsedRange()

    Dim rangeBool As Boolean
    Dim i As Long, lastCol As Long, lastRow As Long, lng As Long, tempRwsCount As Long
    Dim tempRng As Range
    Dim sht As Worksheet

    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False

    For Each sht In ThisWorkbook.Sheets

        On Error Resume Next
        lastRow = sht.Cells.Find(What:="*", _
                  After:=.Range("A1"), _
                  Lookat:=xlPart, _
                  LookIn:=xlFormulas, _
                  SearchOrder:=xlByRows, _
                  SearchDirection:=xlPrevious, _
                  MatchCase:=False).Row
        lastCol = sht.Cells.Find(What:="*", _
                  After:=.Range("A1"), _
                  Lookat:=xlPart, _
                  LookIn:=xlFormulas, _
                  SearchOrder:=xlByColumns, _
                  SearchDirection:=xlPrevious, _
                  MatchCase:=False).Column
        On Error GoTo 0

        tempRwsCount = sht.Rows.count

        If lastRow > 0 And lastRow < tempRwsCount Then
            ' delete empty rows and columns
            Set tempRng = sht.Rows(lastRow + 1 & ":" & tempRwsCount)
            tempRng.Delete
            Set tempRng = sht.Columns(lastCol + 1).Resize(, sht.Columns.count - lastCol)
            tempRng.Delete

        End If

        ' reset used range
        lng = sht.UsedRange.Rows.count

    Next sht

        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub

Изменить # 2

Спасибо Shawn V. Wilson 'за указание на то, что ононеобходимо сохранить файл, а затем закрыть и снова открыть , чтобы увидеть изменения в размере файла.

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