[英]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.