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

我试图创build一个button,只需点击一下,将检查10张工作簿中的特定单元格,并根据单元格值重新调整选项卡的颜色。

例如,

  • 如果单元格E15> 18,那么标签颜色应变成绿色。
  • 如果单元格E15 <18,那么标签颜色应变成红色。

所有的10个标签都应该通过单击button来评估和重新着色。

到目前为止,我的macros看起来像这样,给一个例子只有三张。 这是非常粗鲁的,但我是新的VBA(1天)。

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

Sub Update_Tab_Colour_One_Click() Sheets(4).Activate If Cells(13, 11).Value > 18 Then With ActiveWorkbook.ActiveSheet.Tab .Color = vbGreen End With Else With ActiveWorbook.ActiveSheet.Tab .Color = vbRed End With End If Sheets(5).Activate If Cells(13, 11).Value > 18 Then With ActiveWorkbook.ActiveSheet.Tab .Color = vbGreen End With Else With ActiveWorbook.ActiveSheet.Tab .Color = vbRed End With End If Sheets(6).Activate If Cells(13, 11).Value > 18 Then With ActiveWorkbook.ActiveSheet.Tab .Color = vbGreen End With Else With ActiveWorbook.ActiveSheet.Tab .Color = vbRed End With End If End Sub 

像这样的东西可能会做到这一点。

 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 

在这里,我们创build了一个索引为4:13(10张,增加1)的表单上的For/Next循环。 然后,我们设置一个Worksheetvariables( sh )来表示当前工作表(注意它不需要是Active ),然后根据IIF函数中的布尔expression式设置sh.Tab.Color以返回vbGreen或者vbRed

信息:

For..Next语句参考

IIFfunction参考

如何避免在Excel VBA中使用Select

看看这是否适合你:

 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 

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

循环使用非连续的和命名的工作表

这种替代方法可以让你循环不连续的页面(所以2,4,7不只是1,2,3)和他们的名字(如“Sheet1”,“Sheet2”)。 所以它更加灵活!

它只是简短地写成一个简单的前向循环,我们只是在表格名称或数字上进行循环。

我已经添加了评论来解释每一行的function,请看下面的内容:

 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