好的,我知道标题可能令人困惑,但这里是。
我有一个列表,让我们说 100 人在 Excel 电子表格中,所有名称都在 A 列中,复选框在 B 列中,True 或 False 隐藏在 C 列中。
我在 B 列中手动创建了复选框。它在 C 列中报告真或假。
有没有办法在列表中创建复选框直到最后一个,并让复选框在 C 列中向他们自己的对应方报告,以便上方和下方的复选框不会被任何其他损坏复选框数据?
您可以在场景中插入 2 种类型的控件。一个是窗体控件,另一个是ActiveX 控件
表单控件
要插入表单控件,您必须使用此代码
Sheets("Sheet1").CheckBoxes.Add 52.5, 3, 42, 17.25
语法是
CheckBoxes.Add Cell.Left, Cell.Top, Cell.Width, Cell.Height
ActiveX 控件
要插入 ActiveX 控件,您必须使用此代码
Sheets("Sheet1").OLEObjects.Add ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=54, Top:=1.5, Width:=39.75, Height:=11.25
因此,要添加上述任何控件,您必须使用循环来查找单元格的坐标,然后在相关位置添加复选框。对于您的方案,我建议您使用表单控件,这样您就可以拥有一段代码,该代码将在单击上述任何复选框时运行。
现在我们如何确保所有复选框调用相同的宏:)
提示:此代码创建一个复选框,然后为该复选框分配一个宏。
Sub Sample()
Dim Shp As Shape
'~~> Create a Checkbox
Set Shp = Sheets("Sheet1").CheckBoxes.Add(52.5, 3, 42, 17.25)
'~~> Assing a macro to it
Shp.OnAction = "'" & ActiveWorkbook.Name & "'!macro_name"
End Sub
好的,下一个问题。宏如何知道哪个 CheckBox 正在调用它?
提示:检查什么Application.Caller
;)将代码放在与复选框链接的宏中。
Sub macro_name()
MsgBox "This macro was called by " & Application.Caller
End Sub
HTH 让你走上正轨:)
席德