更新标题正在搞砸我的页面方向和缩放

所以我昨天烧了整整一天,在一个不同的过程中,根据单元格值切换图像。 有趣的是,这一切都从我开始写一点VBA来自动更新页眉和页脚信息之前打印或保存。

情况

我有12个工作表当前在工作簿中。 Sheet1(HEADER AND FOOTER)包含了进入各种页眉/页脚位置的所有信息。

表2-7是作为一个组打印的页面,页眉和页脚都放在上面。

表2-6是每张纸上有多个页面的人像字母页面(由于它们的布局,我不能在某些页面上强制一页纸宽)。

工作表7是横向信件页面。

如果我在编写代码之前打印/保存为pdf,并单独更改每个页面,那么所有工作都很好,所有页面打印在其各自的页面布局/设置中。

当我在Beforeprint中实现VBA代码或在ThisWorkbook中保存之前,事情并不顺利。 根据我尝试的VBA代码的变化,或者页面7将采用与其他页面相同的纵向方向和缩放比例,或者所有页面都是横向的并且具有页面7的缩放比例。

目的

使用适当的页眉/页脚信息更新第2页到第7页,同时保持原始分配的页面设置。 这样,当我打印,表2-6都是肖像,表7是信纸上的风景。

我曾经尝试过

我logging了一个macros来获得基础结构。 最初它把所有工作表放在一个区域并修改它们。 我认为这些页面都是一样的,因为它们都是同时选中的,所以我不是一次select所有的页面,而是一次尝试修改一页。 这导致只有一个工作表正在打印,所以我不得不添加重新select所有的工作表作为最后一行代码。 这是我目前拥有的VBA代码:

Private Sub WorkbookBeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "HEADER AND FOOTER" And InStr(1, Left(ws.Name, 5), "Table", vbTextCompare) = 0 Then Application.PrintCommunication = False With ActiveSheet.PageSetup .CenterHeader = Sheets(1).Range("B1").Value & Chr(10) & "Load Evaluation" .RightHeader = _ "Calculated by: " & Sheets(1).Range("B3").Value & " Date: " & Sheets(1).Range("B4").Value & Chr(10) & "Checked By: " & Sheets(1).Range("B5").Value & " Date: " & Sheets(1).Range("B6").Value .LeftFooter = "Project Number: " & Sheets(1).Range("B2").Value .CenterFooter = "Page &P/&N" .RightFooter = "Print Date: " & Sheets(1).Range("B7").Value End With End If Next ws Sheets(Array("General", "Loads", "Capacity", "Analysis", "POSTING", "SUMMARY")).Select Sheets("General").Activate End Sub 

我在想,也许我实施For Each的方式有些问题,因为这不是我熟悉的forms。 我原本是在考虑使用For x = 2 to ws.count - UDF_worksheet_count_names_starting_with_tables来遍历表单。 我以为我会在这里先检查一下,看看是否有更好的方法来解决这个问题。

所以首先感谢DKbuild议将activesheet.page设置更改为ws.pagesetup。 然而,这并没有解决问题,但确实有更多的意义。 然后我偶然发现这个线程: 除非空白,否则Excel头/页脚不会通过VBA更改 。 我在想什么线路

  Application.PrintCommunication = False 

实际上做了。 当我评论说,排出最后一张布局不再更新/更改为匹配其他页面,事情正在按预期工作。

这就是最终的代码:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "HEADER AND FOOTER" And InStr(1, Left(ws.Name, 5), "Table", vbTextCompare) = 0 Then With ws.PageSetup .CenterHeader = Sheets(1).Range("B1").Value & Chr(10) & "Load Evaluation" .RightHeader = _ "Calculated by: " & Sheets(1).Range("B3").Value & " Date: " & Sheets(1).Range("B4").Value & Chr(10) & "Checked By: " & Sheets(1).Range("B5").Value & " Date: " & Sheets(1).Range("B6").Value .LeftFooter = "Project Number: " & Sheets(1).Range("B2").Value .CenterFooter = "Page &P/&N" .RightFooter = "Print Date: " & Sheets(1).Range("B7").Value End With End If Next ws End Sub