如果满足某些条件,我会编写一个带有if语句的代码,以便向ActiveSheet中的某些单元格添加复选框。我的代码显示了代码。
'To add checkboxes
Dim ToRow As Long
Dim LastRowCB As Long
Dim MyLeft As Double
Dim MyTop As Double
Dim MyHeight As Double
Dim MyWidth As Double
LastRowCB = Range("B1000").End(xlUp).Row
For ToRow = 11 To LastRowCB
If Not IsEmpty(Cells(ToRow, "B")) Then
'-
MyLeft = Cells(ToRow, "A").Left
MyTop = Cells(ToRow, "A").Top
MyHeight = Cells(ToRow, "A").Height
MyWidth = MyHeight = Cells(ToRow, "A").Width
'-
ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
With Selection
.Caption = ""
.Value = xlOff
.LinkedCell = "R" & ToRow
.Display3DShading = False
End With
End If
Next
我现在正在尝试更改此代码,但没有成功将完全相同类型的复选框添加到我激活的一个单元格中。就像我说我已经激活了单元格我只需要改变代码就可以使它只执行ActiveCell而不是ActiveSheet。以下是我改变代码的尝试。我排除了If语句,因为我的想法是因为我已经激活了单元格,所以我不需要所有这些。
ActiveCell.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
With Selection
.Caption = ""
.Value = xlOff
.LinkedCell = "R" & ToRow
.Display3DShading = False
End With
当我尝试运行此代码时,我会在以下行中获得调试。
ActiveCell.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
非常感谢任何建议。
答案 0 :(得分:3)
复选框(和其他控件)是工作表的一部分,而不是单元格。
虽然您可以将控件“放在”单元格上,但它仍然不属于该单元格。
继续使用ActiveSheet
并使用ActiveCell计算您的MyTop, MyLeft, MyHeight
和MyWidth
值。
MyLeft = ActiveCell.Left
MyTop = ActiveCell.Top
MyHeight = ActiveCell.Height
MyWidth = ActiveCell.Width
ActiveSheet.Checkboxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
With Selection
.Caption = ""
.Value = xlOff
.LinkedCell = ActiveCell.Address
.Display3DShading = False
End With
我已更新代码以链接单元格和内容。您问题中的第一个代码示例确实显示了如何减去ActiveCell.Address
!
如果您想明确linked
到R列中的单元格,那么您需要自己制作
例如:.LinkedCell = "R" & ActiveCell.Row
否则ActiveCell.Address
将链接到您添加复选框的单元格。