除非空白,否则Excel页眉/页脚不会通过VBA更改

bje*_*ang 8 excel vba excel-vba excel-2010

免责声明:自从我(很多)使用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
Run Code Online (Sandbox Code Playgroud)

Ste*_*bob 9

我找到了一个似乎可以替换文本的解决方案.无论出于何种原因,在宏中,您需要包含页眉/页脚格式字符代码才能使其正常工作.

此代码用于使用新信息替换现有标题文本:

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
Run Code Online (Sandbox Code Playgroud)

如果没有&L,&C&R文本之前的代码,我无法得到它的工作.

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

.CenterHeader = "&L some text"
Run Code Online (Sandbox Code Playgroud)

它实际上把some textLeftHeader位置.这让我相信格式化代码非常重要.


use*_*236 6

Application.PrintCommunication = False在执行PageSetup之前,该行(由宏录制器添加)通过VBA拧紧格式化.

如果您的代码中包含此行,请尝试将其删除.这解决了我通过VBA设置页眉和页脚的问题.