正在打印空白/空列,因为它们已被使用,现在不被使用

时间:2019-02-08 00:17:39

标签: excel vba

有很多人提出并回答了类似的问题,但是没有一个建议对我有用。我有一张工作表,数据在“ 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 :(得分:1)

查看相关 Excel resetting “UsedRange”Excel VBA usedRange Property and reset usedRange

我似乎想起了UsedRange中的最后一个单元已缓存。这意味着,如果您在X列(使用中最右边的列)中键入了内容,接着进行了业务,然后清除了X列……那么,尽管没有任何单元格填充,UsedRange仍然会进入X列。您必须保存文件或对UsedRange运行一些VBA才能清除缓存的设置。

答案 1 :(得分:0)

我基本上解决了这个问题,或者做了一些工作。我写了一段代码,可以放在另一个宏的末尾,也可以用作自己的宏。它只是将打印区域设置为使用范围的大小。

Sub printPrep()

Dim rng As Range
Set rng = ActiveSheet.UsedRange

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

End Sub