通过VBA宏向特定单元格插入复选框

3

我希望通过宏在特定单元格中插入复选框。

例如:在单击命令按钮后,我应该能够将复选框添加到A1单元格中。

Sheets("Pipeline Products").Range("O" & i & ":AG" & i).Select 
ActiveSheet.CheckBoxes.Add(4, 14.5, 72, 17.25).Select 

With Selection 
    .Caption = "" 
    .Value = xlOff '
    .LinkedCell = "C" & ToRow     
    .Display3DShading = False 
End With 
3个回答

9

这个简单的代码行可以让你在A1单元格中添加复选框,并根据需要设置宽度和高度:

ActiveSheet.OLEObjects.Add "Forms.CheckBox.1", Left:=Range("A1").Left, Top:=Range("A1").Top, Width:=Range("A1").Width, Height:=Range("A1").Height

您可以通过以下方式轻松将其添加到CommandButton:
Private Sub CommandButton1_Click()

    ActiveSheet.OLEObjects.Add "Forms.CheckBox.1", Left:=Range("A1").Left, Top:=Range("A1").Top, Width:=Range("A1").Width, Height:=Range("A1").Height

End Sub

编辑 您的代码进行了改进...

您只需要添加循环将复选框插入多个单元格:

Sub YourCode_Improvment()

    Dim i
    '
    For i = 1 To 10 'cells from 1st to 10th

    ActiveSheet.CheckBoxes.Add(Cells(i, "A").Left, _
                                Cells(i, "A").Top, _
                                72, 17.25).Select
    With Selection
        .Caption = ""
        .Value = xlOff '
        .LinkedCell = "C" & i
        .Display3DShading = False
    End With
    Next
End Sub

如果需要的话,请相应地修改这段代码。


谢谢。但是,如果我想在一系列单元格中添加这些复选框,该怎么办?我已经编写了以下代码。它没有抛出任何错误,但我们没有得到期望的结果。请给予建议。 - user2457968
Sheets("Pipeline Products").Range("O" & i & ":AG" & i).Select ActiveSheet.CheckBoxes.Add(4, 14.5, 72, 17.25).Select With Selection .Caption = "" .Value = xlOff '.LinkedCell = "C" & ToRow .Display3DShading = False End With - user2457968
当你的代码难以从评论中阅读时,请将此代码添加到你的问题中...我向你提供了不同的代码。那么,“期望结果”是什么? - Kazimierz Jawor
我们只在单元格“A1”中得到复选框。我希望这些复选框出现在给定的单元格范围内。例如:从A1到A10。 - user2457968
好的。您能帮我完成这个吗?另外,只有复选框名称不应出现。 - user2457968

2

顶部评论中的代码略有改进。只需选择一个范围并运行它,它将在所有选定的单元格中填充复选框:

Sub InsertCheckboxes()
    Dim c As Range

    For Each c In Selection
        Dim cb As CheckBox
        Set cb = ActiveSheet.CheckBoxes.Add(c.Left, _
                                    c.Top, _
                                    c.Width, _
                                    c.Height)
        With cb
            .Caption = ""
            .Value = xlOff
            .LinkedCell = c.Address
            .Display3DShading = False
        End With
    Next
End Sub

如果需要,可以添加以下代码,并将第四行替换为实际的范围,例如:For Each c In Range("P20:P21") - 这对我所需的操作起到了作用。 - Neil P.

0
你可以使用 For Each 循环来添加复选框。
Dim i as Integer
Dim cel As Range
i = 10
For Each cel In Sheets("Pipeline Products").Range("O" & i & ":AG" & i)
    ActiveSheet.OLEObjects.Add "Forms.CheckBox.1", Left:=cel.Left, Top:=cel.Top, Width:=cel.Width, Height:=cel.Height
Next

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接