簡體   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