2012-07-19 91 views
2

我有一些代码在我Workbook_BeforePrint方法来更新Excel中页眉:不打印VBA的Excel PAGESETUP头

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 

当我打印而不去打印预览第一头不会被更新。

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

如何确保首页打印预览时打印的页眉正确更新?

非常感谢!

+0

您是否检查打印时是否实际执行了事件代码(通过休息)?您是否尝试将代码直接放在PrintSheet子例程中? – Trace 2012-07-19 15:03:45

+0

是的,执行BeforePrint代码并设置页面标题。但是,只有在进行打印预览时才会生效。 – Aetherix 2012-07-19 15:15:23

+0

当我在代码中设置标题后立即显示窗口中的ws.PageSetup.LeftHeader时,它将返回一个空字符串。 – Aetherix 2012-07-19 15:16:45

回答

0

它按照我的预期工作。

请确保工作表(“Sheet1”)。范围(“A1”)实际上有一些东西在里面。检查表单名称以确保它是正确的。工作表有一个名称属性,您可以通过UI和一个CodeName属性进行更改,您可以通过代码或属性对话框更改该属性。仔细检查一下,你不会混淆它们。您的代码工作表(“Sheet1”)使用Name属性(选项卡名称)。

此外,请确保您没有禁用某些调用过程中的事件。您可以在PrintSheet中添加一条语句,如

Debug.Print Application.EnableEvents 

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

+0

这很奇怪。首先,它不适用于我(与Aetherix有相同的问题),当我手动尝试它,一次,它按预期工作(BeforePrint方法读取),也与VBA BeforePrint事件。然后,我在BeforePrint事件方法(Thisworkbook)中更改了LeftHeader并尝试通过VBA提供Print命令,但它不想再读取BeforePrint事件。我无法解释这种行为......在给出常规模块中的打印命令(VBA)之前进行Header设置时,它似乎始终与我一起工作。 – Trace 2012-07-19 16:11:40

+0

@Dick您打印了吗,还是刚刚进入页面预览?如果我使用PrintOut命令并将Preview参数设置为true,它将起作用。如果我不打印页面预览而打印,则不起作用。如果我把代码放在WorkBook_BeforePrint方法之外,一切都可以。 – Aetherix 2012-07-20 13:03:25