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