使用VBA宏更新工作表标题吗?

时间:2019-02-18 16:34:07

标签: excel vba

让我开始时我不是程序员,我是会计师,所以到目前为止我从谷歌搜索问题中学到了什么。我编写了一个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

我想内置到此宏中,以便在保存或运行时或执行所需的任何操作时更新所有工作表标题,因此我不必打开每个选项卡并保存标题即可更新。

1 个答案:

答案 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