繁体   English   中英

打开电子表格时刷新所有VBA代码

[英]Refresh all VBA Codes when opening Spreadsheet

我是excel中VBA的新手,但是我在电子表格中编写了一些不同的代码,这些代码完全可以在测试时正常工作。 我的两个代码都根据日期和发生某事之前剩余的天数来更改选项卡的颜色。 这是一个例子:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim daysLeft As Integer
    daysLeft = 100 'just a number larger than you need
    For i = 6 To 29
        Select Case Range("C" & i).Value
        Case "Due in 5 Days"
            If daysLeft >= 5 Then daysLeft = 5
        Case "Due in 4 Days"
            If daysLeft >= 4 Then daysLeft = 4
        Case "Due in 3 Days"
            If daysLeft >= 3 Then daysLeft = 3
        Case "Due in 2 Days"
            If daysLeft >= 2 Then daysLeft = 2
        Case "Due Tomorrow"
            If daysLeft >= 1 Then daysLeft = 1
        Case "Due Today"
            If daysLeft >= 0 Then daysLeft = 0
        End Select
    Next
    Select Case daysLeft
        Case 100
            Me.Tab.ColorIndex = xlColorIndexNone
        Case 1 To 5
            Me.Tab.ColorIndex = 45
        Case 0
            Me.Tab.ColorIndex = 3
    End Select
End Sub

唯一的问题是,当我打开电子表格时,上述代码不会每天刷新。 选项卡的颜色仍然保持不变,就像我插入和测试代码时一样,并且不会随着“今天”日期的更改而每天更改。 随着日子的推移,标签的颜色应从标准颜色变为橙色,再变为红色。

谁能提供帮助? 我在电子表格的另一个标签上也有类似的代码,但都存在相同的问题。 任何帮助,非常感谢新手!

提前致谢 :-)

只需将事件处理程序例程转换为接受工作表对象作为参数的普通子对象即可:

Private Sub ColorSheets(sht As Worksheet)

    Dim i As Integer
    Dim daysLeft As Integer
    daysLeft = 100 'just a number larger than you need

    With sht
        For i = 6 To 29
            Select Case .Range("C" & i).Value
            Case "Due in 5 Days"
                If daysLeft >= 5 Then daysLeft = 5
            Case "Due in 4 Days"
                If daysLeft >= 4 Then daysLeft = 4
            Case "Due in 3 Days"
                If daysLeft >= 3 Then daysLeft = 3
            Case "Due in 2 Days"
                If daysLeft >= 2 Then daysLeft = 2
            Case "Due Tomorrow"
                If daysLeft >= 1 Then daysLeft = 1
            Case "Due Today"
                If daysLeft >= 0 Then daysLeft = 0
            End Select
        Next
        Select Case daysLeft
            Case 100
                .Tab.ColorIndex = xlColorIndexNone
            Case 1 To 5
                .Tab.ColorIndex = 45
            Case 0
                .Tab.ColorIndex = 3
        End Select
    End With

End Sub

然后将此事件处理程序例程添加到您的ThisWorkbook代码窗格中:

Private Sub Workbook_Open()
    Dim sh As Worksheet
    For Each sh In Worksheets ' loop through worksheets
        ColorSheets sh ' call your routine passing current sheet
    Next
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM