我尝试了下面的各种迭代,有些迭代是第一次工作,然后没有,有些根本没有。
在所有工作表上的短单元格b2中,可以是6个文本条目之一(已完成,进行中,报废,将来的作品,已存放,保留),以显示该特定作品的现时状态。为了一目了然地提供更多帮助,我也希望基于b1更新标签颜色,即如果B2正在进行绿色,则该标签也是如此。
当前代码:
Private Sub tabcolour_Change(ByVal Target As Range)
Select Case Range("$b$2").Value
Case "In progress"
.Color = 43
Case "Held"
.Color = 6
Case "Scrapped"
.Color = 3
Case "Parked"
.Color = 28
Case "Complete"
.Color = 55
Case "Future Works"
.Color = 53
Case Else
.ColorIndex = xlColorIndexNone
End Select
End With
End Sub
我仍然对其进行了少许更新。我在下面使用的文章。
Excel VBA: automatically adjust tab colour
当我在第一行()之间有“ ByVal Target As Range”时,它将不会被视为宏。但是,如果我将其删除,将无法正常工作。
它一次可以正常工作,但是之后没有更改单元格的颜色并引发了错误(这是几个小时前的事,所以记不起消息了)。
这可能是非常基本的东西,但是我的知识也是如此。
有人可以指出我正确的方向吗?
**************编辑/更新**********************
当前代码由Darren提供:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B1"), Target) Is Nothing Then
With ActiveSheet.Tab
Select Case Target
Case "In Progress"
.Color = RGB(153, 204, 0)
Case "Held"
.Color = RGB(255, 255, 0)
Case "Parked"
.Color = RGB(0, 255, 255)
Case "Complete"
.Color = RGB(128, 0, 128)
Case "Future works"
.Color = RGB(153, 0, 167)
Case "scrapped"
.Color = RGB(194, 24, 7)
Case Else
.ColorIndex = xlColorIndexNone
End Select
End With
End If
End Sub
选项卡的颜色确实会更改,但是对于“进行中”,“未来有效”或“废弃”,选项卡颜色不会更改,其余的正常吗?我已经更改了RGB值,以防它们是这些颜色,但是还是一样吗?没有颜色值可以进行这些更改,并且进入框内的文本是正确的,因为我现在也已将此添加为数据验证(使用另一个选项卡上的列表)。我现在完成下拉列表,对于6个中的3个来说,它工作正常。
答案 0 :(得分:0)
两种方法-都使用Change
事件来监视何时在工作表上更新值。
Intersect
命令检查范围B2
是否已更改。
您可以将此代码添加到每个工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B2"), Target) Is Nothing Then
With Target.Parent.Tab
Select Case Target
Case "In Progress"
.Color = 43
Case "Held"
.Color = 6
Case "Parked"
.Color = 28
Case Else
.ColorIndex = xlColorIndexNone
End Select
End With
End If
End Sub
,或者您可以将此代码添加到ThisWorkbook
模块中:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Sh.Range("B2"), Target) Is Nothing Then
With Sh.Tab
Select Case Target
Case "In Progress"
.Color = 43
Case "Held"
.Color = 6
Case "Parked"
.Color = 28
Case Else
.ColorIndex = xlColorIndexNone
End Select
End With
End If
End Sub
答案 1 :(得分:0)
尝试
Private Sub worksheet_Change(ByVal Target As Range)
Dim myTab As Object
Set myTab = ActiveSheet.Tab
With myTab
Select Case Range("$b$2").Value
Case "In progress"
.ColorIndex = 43
Case "Held"
.ColorIndex = 6
Case "Scrapped"
.ColorIndex = 3
Case "Parked"
.ColorIndex = 28
Case "Complete"
.ColorIndex = 55
Case "Future Works"
.ColorIndex = 53
Case Else
.ColorIndex = xlColorIndexNone
End Select
End With
End Sub