Excel VBA 在打开和更改选项卡时对所有工作表进行重新计算

Excel VBA 在打开和更改选项卡时对所有工作表进行重新计算

我有 13 张工作表,每个月有 12 张。12 张工作表中的每一张都有一个单元格,上面写着月份名称。

我已经获得一个 VBA 脚本来测试当前月份是否与单元格匹配并相应地更改选项卡颜色,但它需要在工作表中进行计算才能更新。

Private Sub Worksheet_Change(ByVal Target As Range)
If Format(Date, "MMMM") = Range("E3").Value Then
    Me.Tab.ColorIndex = 10
Else
    Me.Tab.ColorIndex = xlColorIndexNone
End If
End Sub

如果我停止更新上个月的工作表并转到下一个工作表,则两个选项卡都会突出显示,因为前一个工作表未更新。我只想突出显示当前月份的工作表。

有没有办法在打开工作簿并更改标签时重新计算所有工作表?

答案1

ThisWorkbook模块中只需放入

Option Explicit

Private Sub Workbook_Open()
    Dim mySheet As Worksheet
    For Each mySheet In ThisWorkbook.Sheets
        If mySheet.Cells(3, 5).Value = Format(Date, "MMMM") Then
            mySheet.Tab.ColorIndex = 10
        Else: mySheet.Tab.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

现在它不需要计算任何东西,只需在每次打开时检查所有工作表。

答案2

是的。在 VB 编辑器中,进入 ThisWorkbook 对象。在代码窗口顶部,您将看到一个下拉框,上面写着“(General)”或“Workbook”。如果显示“(General)”,请打开下拉框并选择“Workbook”。它可能会立即为您插入一个新子项;如果是这样,只需将其删除即可。

现在,在右上角,您有另一个下拉菜单,上面可能写着“打开”。使用下拉菜单选择“打开”,然后再次选择“工作表激活”。这应该会在您的代码窗口中插入两个新的子程序 -Workbook_OpenSheet_Activate。请注意,您确实希望通过使用下拉菜单来创建它们,而不仅仅是通过输入名称 - 如果您只是输入它们,它们可能无法正常工作。

现在,您可以将任何代码放入这些子程序中,当检测到相关事件(即打开工作簿或选择任何工作表)时,代码将执行。您请求的确切结构将如下所示:

Private Sub Workbook_Open()
    Application.Calculate
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.Calculate
End Sub

我并不是说这是最有效的方法,但这应该可以回答你的问题。

相关内容