【问题标题】:VBA Excel PageSetup Header not printedVBA Excel PageSetup 标题未打印
【发布时间】:2012-07-19 14:32:01
【问题描述】:

我有一些代码可以在我的 Workbook_BeforePrint 方法中更新 Excel 页面标题:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    ws.PageSetup.LeftHeader = ws.Range("A1").Value
End Sub

Public Sub PrintSheet()
    Worksheets("Sheet1").PrintOut
End Sub

当我在不先进入打印预览的情况下打印时,标题不会更新。

当我先去打印预览时,会添加标题。

如何确保在打印时正确更新页眉并先进行打印预览?

非常感谢!

【问题讨论】:

  • 打印时是否检查了事件代码是否实际执行(通过中断)?您是否尝试将代码直接放在 PrintSheet 子例程中?
  • 是的,执行了BeforePrint代码并设置了页眉。但是它只有在我进行打印预览时才会生效。
  • 当我在代码中设置标题后立即在即时窗口中执行 ?ws.PageSetup.LeftHeader 时,它返回一个空字符串。
  • 如果我在方法本身中这样做,它确实有效。

标签: vba excel


【解决方案1】:

它对我来说按预期工作。

确保 Worksheets("Sheet1").Range("A1") 里面确实有一些东西。还要检查工作表名称以确保它是正确的。工作表具有可通过 UI 更改的 Name 属性和可通过代码或“属性”对话框更改的 CodeName 属性。仔细检查你没有混淆他们。您的代码 Worksheets("Sheet1") 使用 Name 属性(选项卡名称)。

另外,请确保您没有在某些调用过程中禁用事件。您可以在 PrintSheet 中添加声明,例如

Debug.Print Application.EnableEvents

确保堆栈中的某些内容不会禁用事件。

【讨论】:

  • 很奇怪。首先,它对我不起作用(与 Aetherix 有相同的问题),当我手动尝试一次时,它按预期工作(读取了 BeforePrint 方法),也与 VBA BeforePrint 事件一起使用。当我在 BeforePrint 事件方法(Thisworkbook)中更改 LeftHeader 并尝试通过 VBA 发出 Print 命令时,它不想再读取 BeforePrint 事件。我无法解释这种行为......在常规模块中给出打印命令(VBA)之前进行页眉设置时,它似乎总是适合我。
  • @Dick 您是打印还是只是进入页面预览?如果我使用 PrintOut 命令并将 Preview 参数设置为 true,它可以工作。如果我在没有进入页面预览的情况下进行打印,它将不起作用。如果我将代码放在 WorkBook_BeforePrint 方法之外,一切都很好......
【解决方案2】:

在对标题进行更改后尝试添加行“Application.PrintCommunication = True”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多