如何更改代码以将一个复选框添加到ActiveCell而不是ActiveSheet?

时间:2013-04-09 18:56:58

标签: excel excel-vba vba

如果满足某些条件,我会编写一个带有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

非常感谢任何建议。

1 个答案:

答案 0 :(得分:3)

复选框(和其他控件)是工作表的一部分,而不是单元格。

虽然您可以将控件“放在”单元格上,但它仍然不属于该单元格。

继续使用ActiveSheet并使用ActiveCell计算您的MyTop, MyLeft, MyHeightMyWidth值。

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将链接到您添加复选框的单元格。