让我开始时我不是程序员,我是会计师,所以到目前为止我从谷歌搜索问题中学到了什么。我编写了一个VBA脚本,以为Excel文档中的每个选项卡生成一个自定义标题,其中包含我公司各个分支机构的详细财务数据。但是,该脚本设置为在保存时更新标题,并且只会更新我正在处理的特定选项卡,而不是所有选项卡。我也希望它排除某些选项卡,但我不知道如何使它起作用。
最初,VBA脚本被设置为在打印时执行,但是我认为将其更改为保存时会更新所有选项卡,但是没有。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
For Each Worksheet In ActiveWorkbook.Worksheets
ActiveSheet.PageSetup.CenterHeader = "&B&26" &
ActiveSheet.Range("C21").Value & vbNewLine & ActiveSheet.Range("C22").Value
& vbNewLine & ActiveSheet.Range("C23").Value & vbNewLine &
ActiveSheet.Range("B24") & " " & ActiveSheet.Range("C20") & " " &
ActiveSheet.Range("C9") & " " & ActiveSheet.Range("D9") & " " &
ActiveSheet.Range("C10")
Next Worksheet
End Sub
我想内置到此宏中,以便在保存或运行时或执行所需的任何操作时更新所有工作表标题,因此我不必打开每个选项卡并保存标题即可更新。
答案 0 :(得分:0)
我认为您不能在其他工作表中循环使用activesheet。 将WS定义为要在循环中使用的工作表变量。
您还可以使用数组变量来手动定义每张图纸。 使用Sheet1作为代号或使用工作表名称Sheets(“ Sheet1”)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
Dim Array1(0 To 3) As Variant
Array1(0) = Sheet2
Array1(1) = Sheet4
Array1(2) = Sheet1
Array1(3) = Sheet6
For Each ws In Array1
ws.PageSetup.CenterHeader = "&B&26" & _
ws.Range("C21").Value & vbNewLine & ws.Range("C22").Value _
& vbNewLine & ws.Range("C23").Value & vbNewLine & _
ws.Range("B24") & " " & ws.Range("C20") & " " & _
ws.Range("C9") & " " & ws.Range("D9") & " " & _
ws.Range("C10")
Next ws
End Sub