尝试在excel中自动更改选项卡颜色
背景:我正在做一个清单项目,有大约100张类似的表格。我把这一切都写进了汇总表。如果有一个未选中的框,那么它将显示在每张工作表底部的摘要部分。摘要部分底部有一个总计行,它基本上显示了工作表上未选中项目的数量 那么,现在来回答我的问题。如果该单元格的值大于0,则我希望选项卡颜色为红色。如果它的值为0,则我希望该工作表的选项卡颜色为绿色 我见过一些论坛,人们说我应该把代码放在VBA编辑器中该工作表的“工作表更改”功能下。但那是行不通的。我会把代码放进去,但它不会运行。我想知道是否有人知道我哪里做错了什么 我还尝试将代码放在模块中,并在工作表代码中调用它,但这也不起作用。似乎其他人在这方面都取得了成功,所以我确信我没有想到什么 供参考:尝试在excel中自动更改选项卡颜色,excel,vba,Excel,Vba,背景:我正在做一个清单项目,有大约100张类似的表格。我把这一切都写进了汇总表。如果有一个未选中的框,那么它将显示在每张工作表底部的摘要部分。摘要部分底部有一个总计行,它基本上显示了工作表上未选中项目的数量 那么,现在来回答我的问题。如果该单元格的值大于0,则我希望选项卡颜色为红色。如果它的值为0,则我希望该工作表的选项卡颜色为绿色 我见过一些论坛,人们说我应该把代码放在VBA编辑器中该工作表的“工作表更改”功能下。但那是行不通的。我会把代码放进去,但它不会运行。我想知道是否有人知道我哪里做错了
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B104")) Is Nothing Then
Select Case Target.Value
Case Is > 0
ActiveSheet.Tab.ColorIndex = 3 'red
Case Is = 0
ActiveSheet.Tab.ColorIndex = 4 'green
Case Else
ActiveSheet.Tab.ColorIndex = xlNone 'no color
End Select
End If
End Sub
这对我有用。在每张纸上循环更改A14和颜色代码
Sub ColorCodeWS()
' loop thru each sheet
For Each ws In Sheets
ws.Activate
If Range("A14") > 0 Then
ActiveSheet.Tab.ColorIndex = 3 'red
ElseIf Range("A14") = 0 Then
ActiveSheet.Tab.ColorIndex = 4 'green
Else
ActiveSheet.Tab.ColorIndex = xlNone 'no color
End If
Next ws
End Sub
根据Tim的建议和你的逻辑…我会这样做:
Sub Workbook_SheetCalculate(ByVal Sh As Object)
If sh.name = "thatname" or sh.name = "anothername" then exit sub
Select Case sh.Range("B104").Value
Case Is > 0
Sh.Tab.ColorIndex = 3 'red
Case Is = 0
Sh.Tab.ColorIndex = 4 'green
Case Else
Sh.Tab.ColorIndex = xlNone 'no color
End Select
End Sub
对于任何缩进问题表示歉意,从我的手机发帖。如果手机B10包含公式,则必须使用Calculate事件而不是Change事件。如果您有多张需要此功能的工作表,请使用我代替ActiveSheet,然后在ThisWorkbook模块中使用工作簿\u SheetCalculateByVal Sh作为对象事件-这样您就不需要在每个工作表中都使用代码了Tim,我已将其更改为我,谢谢。至于其他的评论,除了2页,我确实需要它,所以我认为我被搞砸了,当我去复制所有的页面时,我必须复制并粘贴100次使用工作簿事件,您仍然可以筛选出要跳过的两张工作表。此代码确实如此,而且比我编写的代码更简单,但我需要它不断更新。谢谢你的回答!您无需激活每张图纸即可检查范围并根据该范围更改颜色。几乎不需要使用.Activate。因为已经在每个工作表中循环,所以可以使用ws。而不是ActiveSheet。您还需要完全限定该范围。。。作为ws.Range。。。你也可以做同样的事情,而不用激活床单。