如何让VBA添加的页眉页脚日期时间立即刷新?
解决Excel VBA设置页眉页脚后日期/时间不自动刷新的问题
Excel通过VBA设置包含&[Date]、&[Time]这类特殊字段的页眉页脚后,不会自动触发页面布局的解析刷新,导致字段显示异常,需手动操作才能更新。可通过以下方法强制刷新:
方法1:利用打印预览触发刷新(简单实现)
在原代码末尾添加打印预览并自动关闭的逻辑,让Excel强制解析页眉页脚字段:
Sub Header() With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "xxxxxxxxxx Corp." .RightHeader = "" .LeftFooter = "Page:" & Chr(10) & "Prepared by/Date:" & Chr(10) & "Reviewed by/Date:" .CenterFooter = "&[Tab]" & Chr(10) & "&[File]" .RightFooter = "&[Time]" & Chr(10) & "&[Date]" End With ' 触发打印预览以刷新页眉页脚字段 ActiveSheet.PrintPreview EnableChanges:=False ' 发送ESC键关闭预览窗口 Application.SendKeys "{ESC}" End Sub
注意:
SendKeys依赖窗口焦点,若Excel未处于前台,可能无法正常关闭预览。
方法2:用API关闭预览窗口(更稳定)
使用Windows API直接查找并关闭打印预览窗口,避免SendKeys的不稳定问题,适配64位Excel:
' 声明API函数(64位Excel需加PtrSafe) Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr Sub Header() With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "xxxxxxxxxx Corp." .RightHeader = "" .LeftFooter = "Page:" & Chr(10) & "Prepared by/Date:" & Chr(10) & "Reviewed by/Date:" .CenterFooter = "&[Tab]" & Chr(10) & "&[File]" .RightFooter = "&[Time]" & Chr(10) & "&[Date]" End With ' 触发打印预览刷新字段 ActiveSheet.PrintPreview EnableChanges:=False ' 查找打印预览窗口并关闭 Dim previewWnd As LongPtr previewWnd = FindWindow("XLMAIN", "打印预览") If previewWnd <> 0 Then SendMessage previewWnd, 16, 0, 0 ' WM_CLOSE 消息,关闭窗口 End If End Sub
两种方法均可让页眉页脚中的日期、时间字段在宏运行后立即显示正确内容,无需手动点击刷新。
内容的提问来源于stack exchange,提问作者eiche
相关产品推荐
相关产品推荐

