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