尝试在excel中自动更改选项卡颜色

尝试在excel中自动更改选项卡颜色,excel,vba,Excel,Vba,背景:我正在做一个清单项目,有大约100张类似的表格。我把这一切都写进了汇总表。如果有一个未选中的框,那么它将显示在每张工作表底部的摘要部分。摘要部分底部有一个总计行,它基本上显示了工作表上未选中项目的数量 那么,现在来回答我的问题。如果该单元格的值大于0,则我希望选项卡颜色为红色。如果它的值为0,则我希望该工作表的选项卡颜色为绿色 我见过一些论坛,人们说我应该把代码放在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。。。你也可以做同样的事情,而不用激活床单。