页脚命令第二次无法正常工作
Posted
技术标签:
【中文标题】页脚命令第二次无法正常工作【英文标题】:Footer commands don't work properly the second time 【发布时间】:2021-10-07 09:40:23 【问题描述】:注意:我的 Excel 版本是德语,以防万一发生任何变化。这样做的一个问题可能是the VBA codes for headers and footers 的工作方式不同。
我的代码(第一次使用空页脚):
Sub updateFootnote_Click()
Application.PrintCommunication = False
Application.ScreenUpdating = False
Table2.Activate
With ActiveSheet.PageSetup
.LeftFooter = "Cell Value: " & Table1.Cells(15, 4).Value
.CenterFooter = ""
.RightFooter = "Test" & Chr(10) & "Seite &S von &A"
End With
Table1.Activate
Application.ScreenUpdating = True
Application.PrintCommunication = True
End Sub
页脚结果 1(初始执行时,页脚为空):
Cell Value: 1 | | Test<\n>Seite 1 von 46
' <\n> = linebreak
页脚结果2(第二次执行方法):
Cell Value: 1 | von &[Register] | Test<\n>Seite 1 von 46
' <\n> = linebreak
页脚结果3(第三次执行方法):
Cell Value: 1 | ~von &[Seite]&[Pfad] von~ | Test<\n>Seite 1 von 46
' <\n> = linebreak
' ~Test~ = *strikethrough formated text*
等等,等等。每次我再次执行该功能时,它都会变得更糟,直到您手动删除页脚。 (使用代码将所有三个页脚部分设置为空字符串不起作用)
最重要的是,代码或引用的单元格值中的想要的更改在第一次成功执行代码后无效。
如果有人能告诉我这里出了什么可怕的问题,我将不胜感激,重复执行几个 setter 方法可能会导致不同的结果,并且在页脚不再为空后,想要的更改会被忽略。
【问题讨论】:
激活Table1
和Table2
的目的是什么?你真的想更新Table2
的页脚而不是ActiveSheet
(在执行updateFootnote_Click
子时)?
updateFootnote_Click
是从 Table1
调用的。在禁用屏幕更新的情况下按此顺序激活工作表,从另一个工作表(也称为 Table1
)更新 Table2
的页脚 - 而不会明显更改活动工作表。但这只是为了外观,与描述的问题无关。
我无法重现您的问题,所以我不确定出了什么问题(其他一些因素?)但是如果您将 With ActiveSheet.PageSetup
更改为 With Table2.PageSetup
,您可以更改 Table2
's直接使用页脚,因此您实际上不需要禁用 ScreenUpdating
、PrintCommunication
甚至 Activate
这两个工作表。
您的 RightFooter
似乎也与页脚结果 1 不匹配,它应该返回 Test<\n>Seite _von [Sheet Name]_
并在 _ 内的文本中应用删除线。如果您在新工作簿上尝试,会遇到同样的问题吗?
是的,它与页脚结果 1 匹配。在德文版的 Excel 中,&S 代表页码,&A 代表总页数。我还发现了一个拼写错误的值:它应该是 Table1.Cells(15, 4).Value
而不是 ControllPanel.Cells(15, 4).Value
【参考方案1】:
终于知道了,是什么原因造成的。
如果禁用 PrintCommunication,则 VBA(德语 Excel 版)中的页眉/页脚代码似乎存在问题。如果是这种情况,&P 变为 &S、&N -> &A、&F -> &N 等等。此外,代码可能会在多次执行时来回转换,从而导致更加混乱。
简而言之 - 以下行可能会导致大量问题:
Application.PrintCommunication = False
忽略它可以解决问题。 然后工作代码出来:
Sub updateFootnote_Click()
Application.ScreenUpdating = False
Table2.Activate
With ActiveSheet.PageSetup
.LeftFooter = "Cell Value: " & Table1.Cells(15, 4).Value
.CenterFooter = ""
.RightFooter = "Test" & Chr(10) & "Seite &P von &N"
End With
Table1.Activate
Application.ScreenUpdating = True
End Sub
【讨论】:
以上是关于页脚命令第二次无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章