1

我编写了一个带有 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

非常感谢任何建议。

4

1 回答 1

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

于 2013-04-09T19:06:14.580 回答