Пустые / пустые столбцы печатаются, потому что они использовались, а теперь нет - PullRequest
0 голосов
/ 08 февраля 2019

Есть много людей, которые задавали и отвечали на аналогичные вопросы, но ни одно из предложений не работает для меня.У меня есть лист, где данные заканчиваются в столбце «S».Однако, когда я иду, чтобы напечатать это, предварительный просмотр показывает дополнительные 8 столбцов справа.Когда я применяю фильтр, эти же столбцы также добавляют фильтр, даже если они пусты (я проверил, были ли ячейки пустыми с помощью = ISBLANK (), и он вернул значение true).Если я выделю и удалю 8 столбцов, в предварительном просмотре печати не будет никакой разницы, однако фильтр удалится.

Я думаю, что только что выяснил, почему это происходит, но я все еще не знаю, как это исправить.Данные в листе, который вызывает проблемы, копируются из другой рабочей книги.Исходные данные содержат дополнительные 8 столбцов.Но я запускаю макрос, который форматирует все и удаляет эти столбцы, так как они либо пустые, либо ненужные.

Так что я думаю, по какой-то причине, когда я удаляю 8 столбцов, добавляются 8 столбцов с правой стороны листа?

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

Вот фрагмент одного из макросов.Это единственный фрагмент кода, который удаляет любые столбцы.

    Range("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Range("G:G").Select
    Selection.Delete Shift:=xlToLeft
    Range("H:H").Select
    Selection.Delete Shift:=xlToLeft
    Range("K:L").Select
    Selection.Delete Shift:=xlToLeft
    Range("L:M").Select
    Selection.Delete Shift:=xlToLeft
    Range("O:O").Select
    Selection.Delete Shift:=xlToLeft

    Range("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Crew"
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Yes/ No"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "RPC"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "SCE"
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "Craft"
    Range("O1").Select
    ActiveCell.FormulaR1C1 = "Frequency"
    Range("P1").Select
    ActiveCell.FormulaR1C1 = "Unit"
    Range("S1").Select
    ActiveCell.FormulaR1C1 = "Duration"

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

См. Связанные Сброс Excel «UsedRange» и Excel VBA usedRange Свойство и сброс usedRange

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

0 голосов
/ 08 февраля 2019

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

Sub printPrep()

Dim rng As Range
Set rng = ActiveSheet.UsedRange

With ActiveSheet
    .PageSetup.PrintArea = .UsedRange.Address
    Debug.Print (rng.Address)
End With

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