gpt4 book ai didi

vba - 更新标题搞乱了我的页面方向和缩放

转载 作者:行者123 更新时间:2023-12-02 19:38:23 24 4
gpt4 key购买 nike

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

情况

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

第 2-7 页是作为一组打印的页面,上面有页眉和页脚。

第 2-6 页是纵向字母页面,每张纸上有多个页面(由于其布局,我无法在某些纸张上强制使用 1 页宽)。

第 7 页是横向字母页。

如果我在编写代码并分别更改每个页面之前打印/另存为 pdf,一切都会很好,所有分页都以各自的页面布局/设置打印。

当我在 ThisWorkbook 的 beforeprint 或 beforesave 中实现 VBA 代码时,情况并不顺利。根据我尝试的 VBA 代码的变体,工作表 7 将采用与其他工作表相同的纵向和缩放比例,或者所有工作表都将采用横向并具有工作表 7 的缩放比例。

目标

使用适当的页眉/页脚信息更新工作表 2 到工作表 7,同时保留其原始分配的页面设置。这样,当我打印时,第 2-6 页都是纵向的,第 7 页都是横向的,在信纸上。

我尝试过的

我录制了一个宏来获取基本结构。最初,它将所有工作表都放在一个区域中并对其进行修改。我认为所有页面都是相同的,因为它们都是同时选择的,所以我想尝试一次修改一张纸,而不是一次选择所有页面。这导致只打印一个工作表,因此我必须添加重新选择所有工作表作为最后一行代码。这是我目前拥有的 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 的方式有问题,因为这不是我熟悉的形式。我最初考虑使用 For x = 2 to ws.count - UDF_worksheet_count_names_starting_with_tables循环浏览床单。我想我应该先在这里检查一下是否有更好的方法来解决这个问题。

最佳答案

首先感谢 D.K.建议从 activesheet.page setup 更改为 ws.pagesetup。然而,这并没有解决问题,但确实更有意义。然后我偶然发现了这个线程:Excel headers/footers won't change via VBA unless blank 。我想知道这行是什么

 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

关于vba - 更新标题搞乱了我的页面方向和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com