Excel 2013正常的VBA代码在2016中报1004错误:无法设置CenterHeader属性
解决Excel 2016中PageSetup.CenterHeader的运行时错误1004
这个问题在Excel版本迭代中挺常见的——虽然录制宏生成的代码看起来和原有代码一致,但Excel 2016对PageSetup属性的加载时机和上下文要求更严格。我帮你梳理几个可能的原因和对应的修复方案:
可能的原因及解决方案
1. ActiveSheet的上下文不确定性
你已经用Sheets("Form").Activate激活了目标工作表,但在Workbook_Open事件触发时,Excel的内部初始化状态可能还没完全稳定,导致ActiveSheet的指向出现隐性偏差。最好直接指定工作表对象,彻底避免依赖ActiveSheet的不确定性:
把原来的页眉设置代码,改用With语句明确指向"Form"工作表:
With Sheets("Form") .PageSetup.CenterHeader = "Record: " & Record End With
2. PageSetup属性加载延迟
Excel 2016在工作簿初始化阶段,PageSetup相关的底层属性可能还没完全加载完成,直接设置会触发1004错误。可以通过延迟执行的方式,让Excel完成初始化后再处理页眉设置:
第一步,添加一个单独的页眉设置过程:
Private Sub SetFormHeader(Record As String) Application.ScreenUpdating = False With Sheets("Form") .PageSetup.CenterHeader = "Record: " & Record End With Application.ScreenUpdating = True End Sub
第二步,在Workbook_Open事件中替换原来的页眉设置代码,改为延迟调用:
' 替换原有 ActiveSheet.PageSetup.CenterHeader = "Record: " & Record 这一行 Application.OnTime Now + TimeValue("00:00:01"), "'" & ThisWorkbook.Name & "'!SetFormHeader """ & Record & """'"
3. 旧PageSetup设置残留干扰
有时候工作表中残留的旧PageSetup配置会导致新设置失败,可以先清空原有页眉内容,再设置新值:
With Sheets("Form") .PageSetup.CenterHeader = "" ' 先清空原有设置 .PageSetup.CenterHeader = "Record: " & Record End With
完整修改后的代码示例
结合上面的优化点,调整后的Workbook_Open事件代码如下(还帮你去掉了重复的清除内容操作):
Private Sub Workbook_Open() Dim Obj As Object Dim AWb As String Dim DateFormat As String Dim Record As String AWb = Application.ActiveWorkbook.Name If AWb = "UCSB Service Form.xlsm" Then Application.ScreenUpdating = False With Sheets("Form") .Activate DateFormat = Format(Date, "mm/dd/yy;@") .Range("F2") = DateFormat .Range("F36") = DateFormat .Cells.Validation.Delete 'Sets record number Record = "Pending" .Range("H6") = "'" & Record ' 修复后的页眉设置 .PageSetup.CenterHeader = "" .PageSetup.CenterHeader = "Record: " & Record 'Open blank form .Range("F3:F7").ClearContents .Range("E9:F10").ClearContents .Range("E12:F18").ClearContents .Range("E20:F23").ClearContents .Range("E26:F29").ClearContents .Range("K2:K5").ClearContents .Range("H4:I6").ClearContents .Range("G9:J25").ClearContents .Range("I27:I31").ClearContents .Range("K27:K31").ClearContents .Range("G34:I39").ClearContents .Range("I40").ClearContents .Range("K40").ClearContents .Range("K33:K36").ClearContents 'Clear Highlighting .Range("F3:F7").Interior.Color = xlNone .Range("E9:F9").Interior.Color = xlNone .Range("E12:F13").Interior.Color = xlNone .Range("E14:F17").Interior.Color = xlNone .Range("E18:F18").Interior.Color = xlNone .Range("E20:F23").Interior.Color = xlNone .Range("H4:I4").Interior.Color = xlNone End With Application.ScreenUpdating = True Sheets("Form").Range("F3").Select Application.ScreenUpdating = False Sheets("Form").Range("H6") = "'" & Record Set Obj = Sheets("Form").CommandButton1 Obj.Caption = "Save" Call M_Lists.S_Lists End If 'Updated 4/25/18 End Sub
内容的提问来源于stack exchange,提问作者imthatonegirl
相关产品推荐
相关产品推荐

