excel - 创建一个复选框,复制它,然后将新的复选框报告到新位置

标签 excel vba

好吧,我知道标题可能会令人困惑,但就是这样。

我的 Excel 电子表格中有一个包含 100 个人的列表,所有姓名都在 A 列中,复选框位于 B 列中,True 或 False 隐藏在 C 列中。

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

有没有一种方法可以在列表中一直创建复选框直到最后一个,并让这些复选框向 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 并让您走上正轨:)

席德

关于excel - 创建一个复选框,复制它,然后将新的复选框报告到新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013984/

相关文章:

excel - VBA错误处理转到下一个循环而不是恢复

vba - 获取Word文档的页数

html - 从 iframe 中按 ID 获取元素

excel - 删除空单元格(上移)

vb.net - 从范围内的单元格中读取所有唯一值并从中创建一个逗号分隔的字符串?

VBA - 如何获取工作表代号索引

python - 在Python中使用Pandas将多表Excel文件保存到Azure Blob存储

html - 使用 VBA 从网站上抓取表格

excel - 使用基于动态相邻列值的 excel rank 函数

excel - Excel 工作表中的独立计时器宏