创建一个复选框,处理它,并将新的复选框报告到新的位置

时间:2012-04-04 15:10:05

标签: excel-vba vba excel

好的,我知道标题可能令人困惑,但现在就是这样。

我在excel电子表格中有100个人的列表,所有名称都在A列中,复选框在B列中,而True或False隐藏在C列中。

我在B列中手动创建了复选框。它在C列中报告了真或假。

是否有办法在列表中一直创建复选框,直到最后一个,并将所述复选框报告给C列中的对应部分,以便上面和下面的复选框不会损坏通过任何其他复选框数据?

1 个答案:

答案 0 :(得分:3)

您可以在方案中插入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

因此,要添加上述任何控件,必须使用循环查找单元格的坐标,然后在相关位置添加复选框。对于您的场景,我建议使用表单控件,以便您可以使用一段代码在单击上述任何复选框时运行。

现在我们如何确保所有Checkbox都调用相同的宏:)

提示:此代码会创建一个复选框,然后将宏指定给复选框。

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让你走上正轨:)

西特