免责声明:自从我(很多)与VBA合作已经有几年了,所以这可能是一个问题,因为我将自己与我通常处理的语言完全不同。
因此;我有一张多张(20+)的工作簿(Excel 2010),其中大多数是多页的。为了在打印所有内容时更容易,我想添加一些特定于工作表的标题,其中包括工作表的名称,页数等。
我写了一个很小的函数,理论上应该通过迭代设置标题的所有工作表为我做这个。但是,出于某种原因,它仅在标头为空时才有效;如果它已经有一个值,它会因某些未知原因而拒绝覆盖。
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
答案 0 :(得分:9)
我找到了一个似乎可以替换文本的解决方案。无论出于何种原因,在宏中,您需要包含header/footer format character codes才能使其正常工作。
此代码用新信息替换现有标题文本:
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
位置。这让我相信格式化代码非常重要。
答案 1 :(得分:6)
在使用PageSetup通过VBA搞定格式化之前,行Application.PrintCommunication = False
(由宏录制器添加)。
如果您的代码中包含此行,请尝试将其删除。这解决了我通过VBA设置页眉和页脚的问题。
答案 2 :(得分:2)
我已经阅读了StackOverflow多年,这是我第一次真正能够发布解决方案...希望它可以帮助别人!另外,你需要记住,我是注册会计师而不是程序员; - )
我正在从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
检查“市场竞争”选举年份是否与选举表格相同,然后格式化选举页面。
答案 3 :(得分:1)
我将纸张打印设置分成2个循环。 Application.PrintCommunication = False的第一个循环我运行非页眉/页脚设置。然后我设置Application.PrintCommunication = True并在第二个循环中运行页眉/页脚设置。似乎比XL2003运行得更快,并正确应用页眉/页脚。在MS修复此错误之前,这对我来说很好。