Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel页眉/页脚赢得';除非为空,否则不能通过VBA进行更改_Vba_Excel_Excel 2010 - Fatal编程技术网

Excel页眉/页脚赢得';除非为空,否则不能通过VBA进行更改

Excel页眉/页脚赢得';除非为空,否则不能通过VBA进行更改,vba,excel,excel-2010,Vba,Excel,Excel 2010,免责声明:我(经常)使用VBA已经有几年了,所以这可能是因为我把自己和一种本质上与我通常使用的语言截然不同的语言混淆了 所以,;我有一个工作簿(Excel 2010),有多张工作表(20+),其中大多数是多页的。为了在打印所有内容时更方便,我想添加一些特定于工作表的标题,其中包括工作表的名称、页数等 我已经编写了一个小函数,它(理论上)应该通过迭代设置标题的所有工作表来为我做到这一点。但是,由于某些原因,它仅在标头为空时工作;如果它已经有一个值,它会因为未知的原因拒绝覆盖 Dim sheetIn

免责声明:我(经常)使用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
Dim sheetIndex,numsheets为整数
索引=1
numsheets=Sheets.Count
'循环浏览每张图纸,但不要将其中任何一张设置为活动

虽然sheetIndex我找到了一个解决方案,似乎可以替换文本。无论出于何种原因,在宏中,您都需要包含以使其正常工作

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

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"

它实际上会将
某些文本
放在
左标题
位置。这使我相信格式化代码非常重要。

在执行页面设置之前,行
Application.PrintCommunication=False
(由宏记录器添加)会通过VBA破坏格式化


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

我已经阅读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

它检查按市值计价的选举年份是否与选举表格相同,然后格式化选举页面。

我将纸张打印设置拆分为两个循环。第一个循环Application.PrintCommunication=False我运行非页眉/页脚设置。然后我设置Application.PrintCommunication=True,并在第二个循环中运行页眉/页脚设置。运行速度似乎比XL2003快,并正确应用页眉/页脚。在微软修复这个错误之前,这对我来说很好。

非常奇怪的行为。我可以在Excel 2010中复制您的问题。即使在手动更改标题时录制宏,然后运行该宏,它也无法正常工作。关于添加标题文本部分的看似随机的行为。是的,我在向标题的其他部分添加页码时也遇到了一些问题;出于某种原因,Excel删除了部分神奇的单词(用&[Pa]替换例如&[Pages])这只会在标题被宏编辑时发生,例如,如果它更改了LeftHeader,也会弄乱RightHeader。我怀疑这与您的问题有关,但请确保您在角色文本中查找并替换标题文本中需要转义的字符(我想到的是,如果他们有机会(比如“包装与分销”的角色),需要将其加倍为&&)pnuts,Cor_Blimey:没有区别,GetRole返回一个没有特殊字符的简单字符串。不过谢谢你的建议。谢谢!这是正确的答案,因为我还保留了那行记录。我一删除那行宏就开始按预期工作。