VBA-根据单元格值更改多个工作表选项卡的颜色

VBA-根据单元格值更改多个工作表选项卡的颜色,vba,excel,Vba,Excel,我正在尝试创建一个按钮,一次单击,将检查工作簿10页中的特定单元格,并根据单元格值重新显示选项卡 比如说, 如果单元格E15>18,则标签颜色应变为绿色 如果单元格E1518,vbGreen,vbRed):以结束这也有效!非常感谢你。我也很感谢您的解释和进一步文档的链接!很好的帮助Hi BruceWayne(很棒的名字)。那很有效!我非常感谢您的即时回复!迫不及待地想对VBA有足够的了解,以便能够解决像这样愚蠢的问题。如果你不介意的话,你是如何学习VBA的?@JoeHoneywood-宏录制,

我正在尝试创建一个按钮,一次单击,将检查工作簿10页中的特定单元格,并根据单元格值重新显示选项卡

比如说,

  • 如果单元格E15>18,则标签颜色应变为绿色
  • 如果单元格E15<18,则标签颜色应变为红色
所有10个选项卡都应在单击一个按钮后进行评估和重新查找

到目前为止,我的宏看起来是这样的,举三张纸为例。这是非常粗糙,但我是非常新的VBA(1天)

我的主要问题是它适用于第一个选项卡,但随后打开第二个选项卡并显示“需要对象”


看看这是否适合您:

Sub Update_Tab_Colour_One_Click()
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    If ws.Index = 4 Or ws.Index = 5 Or ws.Index = 6 Then
        If ws.Cells(13, 11).Value > 18 Then
            ws.Tab.Color = vbGreen
        Else
            ws.Tab.Color = vbRed
        End If
    End If
Next ws

End Sub

它检查是否是
4
5
6
索引表,然后检查单元格值并相应地为选项卡着色。

类似的操作可能会执行此操作

Dim sh as Worksheet
Dim s as Long

For s = 4 to 13 ' Modify if needed
    Set sh = ThisWorkbook.Worksheets(s)
    With sh
        .Tab.Color = IIF(.Cells(13,11).Value > 18, vbGreen, vbRed)
    End With
Next
在这里,我们在索引为4:13(10张图纸,递增1)的图纸上创建了一个
For/Next
循环。然后,我们设置一个
工作表
变量(
sh
)来表示当前工作表(请注意,它不需要处于
活动状态
),然后根据
IIF
函数中的布尔表达式设置
sh.Tab.Color
,以返回
vbGreen
vbRed

信息:

报表引用

函数引用

在非连续和命名的图纸上循环 此备选方案允许您在不连续的图纸上循环(因此2,4,7而不仅仅是1,2,3)并按其名称循环(如“Sheet1”、“Sheet2”)。所以它更灵活

它恰好和直接循环一样短,我们只是在一个表名或数字数组上循环

我添加了注释来解释每一行的作用,见下文:

Sub Update_Tab_Colour_One_Click()
    ' Declare array of sheet numbers and/or names
    Dim mySheets As Variant
    mySheets = Array(2, 4, "Sheet1")
    ' Loop over sheet numbers / names
    Dim i As Long
    For i = LBound(mySheets) To UBound(mySheets)
        ' Use With so we don't have to repeatedly say we are within this sheet
        With ThisWorkbook.Sheets(mySheets(i))
            ' Use IIF to concisely assign a conditional value
            .Tab.Color = IIf(.Cells(13, 11).Value > 18, vbGreen, vbRed)
        End With
    Next i
End Sub

在哪一行出现错误?避免使用ActiveSheet。您也可以通过这种方式删除激活语句。避免激活工作表,只需使用循环即可。你的错误是什么?好的第一篇帖子!正如你所注意到的,下面的答案都是有效的。您是否可以通过单击要标记为“答案”的帖子左侧的复选标记(位于上/下箭头下方)来选择其中一个作为答案。这也很有帮助,因为当浏览时,它会为其他人显示已回答/已关闭的问题。(就我个人而言,我喜欢@DavidZemens的答案,但这当然取决于你!)我总是忘记
IIF()
,很好地考虑了这一点和
Tab.Color
。我会停止创建
sh
变量,因为它只使用了一次,并将
与这个工作簿一起使用。工作表:.Tab.Color=IIF(.Cells(13,11).Value>18,vbGreen,vbRed):以
结束这也有效!非常感谢你。我也很感谢您的解释和进一步文档的链接!很好的帮助Hi BruceWayne(很棒的名字)。那很有效!我非常感谢您的即时回复!迫不及待地想对VBA有足够的了解,以便能够解决像这样愚蠢的问题。如果你不介意的话,你是如何学习VBA的?@JoeHoneywood-宏录制,学习使用(这有助于学习使用变量),还有很多谷歌,没有这么多的人和这里的伟人,绝对无法做到这一点:DAnother完美的答案。加入这个网站是我做过的最好的事情!非常感谢大家的专业知识。很高兴能提供帮助!您得到了很好的响应,因为您给出了清晰的问题描述和一些您遇到问题的示例代码。您的下一个问题将通过包括哪一行抛出错误()而变得更好。
Sub Update_Tab_Colour_One_Click()
    ' Declare array of sheet numbers and/or names
    Dim mySheets As Variant
    mySheets = Array(2, 4, "Sheet1")
    ' Loop over sheet numbers / names
    Dim i As Long
    For i = LBound(mySheets) To UBound(mySheets)
        ' Use With so we don't have to repeatedly say we are within this sheet
        With ThisWorkbook.Sheets(mySheets(i))
            ' Use IIF to concisely assign a conditional value
            .Tab.Color = IIf(.Cells(13, 11).Value > 18, vbGreen, vbRed)
        End With
    Next i
End Sub