创build一个通用的Checkbox_Click VBA代码

我正在创build一个excel文件,这是一个清单,目前我在D列中有73个checkbox,在E列中它将根据用户名在选项字段中填充用户的名字。

目前我有代码如:

Sub CheckBox1_Click() If ActiveSheet.CheckBoxes("Check Box 1").Value = 1 Then Range("E3").Value = Application.UserName Else: Range("E3").Value = "" End If End Sub Sub CheckBox2_Click() If ActiveSheet.CheckBoxes("Check Box 2").Value = 1 Then Range("E4").Value = Application.UserName Else: Range("E4").Value = "" End If End Sub 

对于列D中的每个checkbox。它确实工作,但我现在需要现在将列D复制到列F,H,J,L在一周的其他几天,我很好奇,如果有一个更快的方法来做到这一点,一个更清洁的方式这样做,而不是有一个长长的名单。

尝试这样的事情。 您将不得不格式化每个checkbox,并将其分配给每个格式| 分配macros选项。

 Sub Generic_ChkBox() Dim cbName As String Dim cbCell As Range Dim printValue as String cbName = Application.Caller Set cbCell = ActiveSheet.CheckBoxes(cbName).TopLeftCell Select Case cbCell.Column Case 4 'prints the username in column E printValue = Application.UserName Case 6 'prints "Something else" in column G printValue = "Something else" Case 8 'prints "etc..." in column I, etc. printValue = "etc..." Case 10 printValue = "etc..." Case 12 printValue = "etc..." End Select If ActiveSheet.CheckBoxes(cbName).Value = 1 Then cbCell.Offset(0, 1).Value = printValue Else cbCell.Offset(0, 1).Value = vbNullString End If End Sub 

我假设你将要分配用户名值到CheckBox的下一个单元格。 对于D4有checkbox,那么值将是E4。

 Sub ProcessAllCheckBox() Dim ws As Worksheet, s As Shape Sheets("Sheet1").Columns("A:Z").ClearContents Set ws = ActiveSheet For Each chk In ActiveSheet.CheckBoxes If chk.Value = 1 Then Set s = ws.Shapes(chk.Caption) Sheets("Sheet1").Range(Cells(s.TopLeftCell.Row, s.TopLeftCell.Column + 1), Cells(s.TopLeftCell.Row, s.TopLeftCell.Column + 1)).Value = Application.UserName End If Next 

结束小组

请在WorkShee Active中更新下面的代码

 Private Sub Worksheet_Activate() For Each chk In ActiveSheet.CheckBoxes chk.OnAction = "ProcessAllCheckBox" Next ProcessAllCheckBox End Sub