如果选中checkbox,则更改下一个工作表上的单元格的单元格颜色

我有一个excel文件,每张表格代表每个月的信息。 这些表包含成员的列表。 在每张纸上有多个checkbox(每张大约250张)。 我想做以下事情。

SeptemberOctober为例, 如果我在September上勾选了一个checkbox,那么下一张表格上的checkbox(例如D23 )的颜色(在这个例子中是"October" )应该变成蓝色。 如果相同的checkbox未被选中(即使将来也是如此),那么单元格会变成红色。

  1. 'September'!D:23checkbox'September'!D:23
  2. 下一张纸上的单元格D23上的颜色October变成蓝色
  3. 'September'!D:23'September'!D:23取消勾选
  4. 下一张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