如果选中checkbox,则更改下一个工作表上的单元格的单元格颜色
我有一个excel文件,每张表格代表每个月的信息。 这些表包含成员的列表。 在每张纸上有多个checkbox(每张大约250张)。 我想做以下事情。
以September
和October
为例, 如果我在September
上勾选了一个checkbox,那么下一张表格上的checkbox(例如D23
)的颜色(在这个例子中是"October"
)应该变成蓝色。 如果相同的checkbox未被选中(即使将来也是如此),那么单元格会变成红色。
-
'September'!D:23
checkbox'September'!D:23
- 下一张纸上的单元格
D23
上的颜色October
变成蓝色 -
'September'!D:23
。'September'!D:23
取消勾选 - 下一张
October
单元格D23
上的颜色变成红色
我解决这个问题的方法:我写了一个Sub
,当创build一个checkbox时,它将checkbox链接到它所在的单元格上(例如D23
),以便我可以知道哪个单元格需要在选中/未选中时更改在下一张表上:
.LinkedCell = Selection.Address(False, False)
这是我迄今为止所尝试的,但没有成功:
Sub SetMacro() Dim cb For Each cb In ActiveSheet.CheckBoxes If cb.OnAction = "" Then cb.OnAction = "CheckedUnchecked" Next cb End Sub
这里是检查/取消选中的代码:
Sub CheckedUnchecked() With ActiveSheet.Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell) If .Value Then Worksheet(ActiveSheet.Index + 1).Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Interior.ColorIndex = 5 Else Worksheet(ActiveSheet.Index + 1).Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Interior.ColorIndex = 3 End If End With End Sub
对这个问题有什么想法?
工作表具有引用工作表集合中下一个工作表的.Next
方法。 如果工作表是集合中的最后一个工作表,它将不会返回任何内容。
粘贴到标准模块
Sub CheckedUnchecked() Dim cb As CheckBox With ActiveSheet Set cb = .CheckBoxes(Application.Caller) If Not cb Is Nothing Then If .Next Is Nothing Then Worksheets("January").Range(cb.TopLeftCell.Address).Interior.ColorIndex = IIf(cb.Value = 1, 5, 3) Else .Next.Range(cb.TopLeftCell.Address).Interior.ColorIndex = IIf(cb.Value = 1, 5, 3) End If End If End With End Sub
编辑 NextMonthSht()以正确处理9个月后的月份索引
这里有一个稍微不同的解决scheme:
-
允许任何索引顺序的月份表
-
允许任何工作表名称
码:
Sub CheckedUnchecked() With ActiveSheet.CheckBoxes(Application.Caller) NextMonthSht.Range(.TopLeftCell.Address).Interior.ColorIndex = IIf(.Value = 1, 5, 3) End With End Sub Function NextMonthSht() As Worksheet Const MONTHS As String = "January,February,March,April,Maj,June,July,August,September,October,November,December,January" Set NextMonthSht = Worksheets(Split(MONTHS, ",")(Len(Left(MONTHS, InStr(MONTHS, ActiveSheet.name))) - Len(Replace(Left(MONTHS, InStr(MONTHS, ActiveSheet.name)), ",", "")) + 1)) End Function