【问题标题】: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 方法可能会导致不同的结果,并且在页脚不再为空后,想要的更改会被忽略。

【问题讨论】:

  • 激活Table1Table2的目的是什么?你真的想更新Table2 的页脚而不是ActiveSheet(在执行updateFootnote_Click 子时)?
  • updateFootnote_Click 是从 Table1 调用的。在禁用屏幕更新的情况下按此顺序激活工作表,从另一个工作表(也称为 Table1)更新 Table2 的页脚 - 而不会明显更改活动工作表。但这只是为了外观,与描述的问题无关。
  • 我无法重现您的问题,所以我不确定出了什么问题(其他一些因素?)但是如果您将 With ActiveSheet.PageSetup 更改为 With Table2.PageSetup ,您可以更改 Table2's直接使用页脚,因此您实际上不需要禁用 ScreenUpdatingPrintCommunication 甚至 Activate 这两个工作表。
  • 您的 RightFooter 似乎也与页脚结果 1 不匹配,它应该返回 Test&lt;\n&gt;Seite _von [Sheet Name]_ 并在 _ 内的文本中应用删除线。如果您在新工作簿上尝试,会遇到同样的问题吗?
  • 是的,它与页脚结果 1 匹配。在德文版的 Excel 中,&S 代表页码,&A 代表总页数。我还发现了一个拼写错误的值:它应该是 Table1.Cells(15, 4).Value 而不是 ControllPanel.Cells(15, 4).Value

标签: excel vba footer


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多