除非空白,否则Excel头/页脚将不会通过VBA进行更改

免责声明:我已经使用VBA工作了很多年,所以这可能是一个问题,这个问题是由于我自己与我通常处理的语言完全不同而造成的。

所以; 我有一个工作簿(Excel 2010)与多张(20+),其中大多数是多页。 为了使打印的一切更容易,我想添加一些特定的表头,其中包括表格的名称,页数等等。

我已经写了一个小函数,应该(理论上)通过迭代设置标题的所有表单来完成此操作。 但是,由于某些原因,只有在标题为空时才有效。 如果它已经有一个值,拒绝覆盖原因不明。

Dim sheetIndex, numsheets As Integer sheetIndex = 1 numsheets = Sheets.Count ' Loop through each sheet, but don't set any of them to active While sheetIndex <= numsheets Dim sheetname, role, labeltext As String sheetname = Sheets(sheetIndex).name role = GetRole(mode) labeltext = "Some text - " & sheetname & " - " & role With Sheets(sheetIndex).PageSetup .LeftHeader = labeltext .CenterHeader = "" .RightHeader = "Page &[Page] / &[Pages]" .LeftFooter = "&[Date] - &[Time]" .CenterFooter = "" .RightFooter = "Page &P / &N" End With sheetIndex = sheetIndex + 1 Wend 

我find了一个解决scheme,似乎取代文本工作。 无论出于何种原因,在macros中,您需要包含页眉/页脚格式字符代码才能正常工作。

此代码用新信息取代现有标题文本:

 Sub test() Dim sht As Worksheet Set sht = Worksheets(1) sht.PageSetup.LeftHeader = "&L left text" sht.PageSetup.CenterHeader = "&C center Text" sht.PageSetup.RightHeader = "&R right text" End Sub 

如果在文本之前没有&L&C ”和&R代码,我无法使其工作。

我发现一些有趣的行为是,如果你使用下面的代码:

 .CenterHeader = "&L some text" 

它实际上会把some text放在LeftHeader位置。 这使我相信格式化代码非常重要。

在执行PageSetup之前,将Application.PrintCommunication = False (这是由macroslogging器添加的)行通过VBAlocking格式化。

如果你的代码已经有了这一行,请尝试删除它。 这解决了我通过VBA设置页眉和页脚的问题。

我已经阅读了StackOverflow多年,这是我第一次真正能够发布解决scheme…希望它可以帮助别人! 另外,你需要记住,我是一名注册会计师而不是程序员;-)

我正在读取ActiveSheet中的一些值来填充标题。 申请是一个税务选举,将与纳税申报表一起发送,因此必须将纳税人的姓名和社会安全号码放在顶部。

 Sub PrintElection() ' Print preview the MTM Election If Range("Tax_Year").Value = Range("First_MTM_year").Value Then ActiveSheet.PageSetup.LeftHeader = Format(Worksheets("Election").Range("Taxpayer_Name").Value) ActiveSheet.PageSetup.RightHeader = Format(Worksheets("Election").Range("Taxpayer_SSN").Value) ActiveWindow.SelectedSheets.PrintPreview Else MsgBox "The 'Effective For Tax Year' date must EQUAL the 'First MTM year' date", vbOKOnly, "Check Years" Sheets("Roadmap").Select Range("First_MTM_year").Select End If End Sub 

它会检查Mark-to-Market选举年是否与选举表格相同,然后格式化选举页面。

我将表单打印设置分成2个循环。 第一个循环与Application.PrintCommunication = False我运行非页眉/页脚设置。 然后设置Application.PrintCommunication = True并在第二个循环中运行页眉/页脚设置。 看起来运行速度比在XL2003,并正确应用页眉/页脚。 直到MS修复这个错误,这对我来说工作得很好。