【发布时间】:2015-10-03 06:03:14
【问题描述】:
免责声明:自从我(很多)使用 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
【问题讨论】:
-
非常奇怪的行为。我可以在 Excel 2010 中复制您的问题。即使我在手动更改标题时录制宏,然后运行该宏,它也无法正常工作。关于添加部分标题文本的看似随机的行为。
-
是的,在将页码添加到页眉的其他部分时,我也遇到了一些问题;出于某种原因,Excel 删除了部分魔法词(例如用 &[Pa 替换了 &[Pages]),从而使整个标题变得无用。这只发生在标题由宏编辑时,例如。如果它改变了 LeftHeader 它也会弄乱 RightHeader
-
我怀疑这与您的问题有关,但请确保您在 role 文本上查找并替换需要在标题文本中转义的字符(与想到哪些需要加倍为 &&) 如果有任何机会它们在那里(比如“包装和分发”作为一个角色..)
-
pnuts,Cor_Blimey:没有区别,GetRole 返回一个没有特殊字符的简单字符串。不过感谢您的建议。
标签: vba excel excel-2010