3

我录制了一个宏来自动格式化我每周发送的 Excel 2010 中的报告。部分宏调整页面设置属性,包括将布局更改为横向和合法大小。

我可以在我的计算机上运行它,因为我的打印机将 Legal 尺寸的纸张作为默认值之一。但是,有些人在使用 Legal 尺寸纸张打印之前必须手动调整打印机,并且出现错误。

运行时错误“1004”:对象“_Application”的方法“PrintCommunication”失败

当我调试它突出显示Application.Printcommunication = True.

当我更改为Application.PrintCommunication = False宏时,它并没有完全按照它的构建方式格式化它(例如,Zoom 保持在 100%)。

我认为一种解决方法可能是在运行宏之前将其默认打印机更改为 Nitro Pro(类似于 Adob​​e Pro),但错误仍然存​​在。

Sub Auto_Open()
'
' Macro2 Macro
'

'
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .LeftMargin = Application.InchesToPoints(0.17)
        .RightMargin = Application.InchesToPoints(0.17)
        .TopMargin = Application.InchesToPoints(0.62)
        .BottomMargin = Application.InchesToPoints(0.48)
        .HeaderMargin = Application.InchesToPoints(0.17)
        .FooterMargin = Application.InchesToPoints(0.17)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 1200
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperLegal
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 60
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
    End With
    Application.PrintCommunication = True
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("N2:O2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("L1").Select
    Columns("B:B").ColumnWidth = 10.86
    Columns("D:D").ColumnWidth = 18.86
    Columns("E:E").ColumnWidth = 13.43
    Columns("F:F").ColumnWidth = 11.29
    Columns("F:F").ColumnWidth = 19.29
    Columns("G:G").EntireColumn.AutoFit
    Range("H1").Select
    ActiveWindow.SmallScroll Down:=-33
    Range("I1").Select
    Range("G1").Select
    Columns("H:H").ColumnWidth = 13
    Columns("I:I").ColumnWidth = 18.71
    Columns("J:J").ColumnWidth = 19.86
    Columns("K:K").ColumnWidth = 13.57
    Columns("L:L").ColumnWidth = 11
    Columns("L:L").ColumnWidth = 11.43
    Columns("M:M").ColumnWidth = 12.71
    Columns("M:M").ColumnWidth = 15.86
    Columns("N:N").ColumnWidth = 41.86
    Columns("O:O").ColumnWidth = 18.57
    Columns("O:O").ColumnWidth = 28.86
    Columns("O:O").ColumnWidth = 42
    Columns("L:L").ColumnWidth = 12.71
    Range("K2:L2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.NumberFormat = "$#,##0"
    ActiveWindow.SmallScroll Down:=-30
    Columns("A:A").Select
    Selection.EntireColumn.Hidden = True
    Rows("1:1000").EntireRow.AutoFit
    Range("B1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    ActiveWindow.Zoom = 75
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("E2").Select
    ActiveWindow.SmallScroll Down:=-6
    ActiveWindow.LargeScroll ToRight:=-1
    With ActiveWindow
        .SplitColumn = 0
        .SplitRow = 1
    End With
    ActiveWindow.FreezePanes = True
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&""-,Bold""&12Weekly Staffing Summary Request &D"
        .RightHeader = ""
        .LeftFooter = "&D"
        .CenterFooter = "&P"
        .RightFooter = "&F"
    End With
    
End Sub
4

6 回答 6

5

该行.PrintQuality = 1200从录制的宏中拉入并导致错误。删除了该行并不管打印机如何工作,甚至使用 Nitro PDF 作为默认打印机。

于 2013-10-22T17:19:49.623 回答
2

显然有些迟回复,但今天我有同样的错误。我的问题是我的计算机无法联系默认打印机。

我将其更改为仅在计算机内部工作的 PDF 打印机,然后一切正常!

于 2016-03-06T19:45:56.850 回答
1

这里的问题是您的打印机设置(与宏无关)不允许宏与打印机通信。设置打印机设置时,需要通信。进入您的打印机设置并使用设置,我想您只需要“启用双向通信”,问题就会消失。

于 2020-05-01T08:11:57.130 回答
0

Add this line at the top & every thing will be fine:

On Error Resume Next
于 2017-05-27T10:43:09.523 回答
0

您可以像这样使用“on error resume next”:

On Error Resume Next
Application.PrintCommunication = False
Err.Clear

接着 :

On Error Resume Next
Application.PrintCommunication = True
Err.Clear

如果您只想进行页面设置,则无需关闭 PrintCommunication。但是可以在执行时间上看到差异:关闭打印机通信后执行速度更快。

我有 Excel 2010,有时 PrintCommunication 工作正常,有时不行。直到现在我才弄清楚为什么!

于 2017-10-19T17:59:29.267 回答
0

我尝试了不同的方法来发现问题。

我没有停止打印通信并运行宏 Application.PrintCommunication = True

出错时,它会显示一条错误消息。就我而言,它是纸张大小。我将其更正为“.PaperSize = xlPaperLetter”

之后我对宏进行了多次试运行,它工作正常。

最后,当一切都好。我在页面设置之前停止了通信。Application.PrintCommunication = False

于 2021-06-15T10:54:50.933 回答