使用命令按钮将复选框复制到每 5 个单元格

Copy Check Box to Every 5th Cell with Command Button

我有一个问题,我无法 solve.I 编写此代码:

Private Sub CommandButton2_Click()

Sheets("sheet2").OLEObjects("CheckBox1").Copy

Sheets("sheet3").Range("V7").PasteSpecial

End Sub

此代码从 (sheet 2) 到 (sheet 3) 从 V7 单元格开始复制一个复选框。现在我希望下次按下命令按钮时将数据粘贴到单元格 V12,下次粘贴到 V17 等。如您所见,我的 vba 知识不是很好。

我不知道你在 Sheet(3).Range("V7") 和 Sheet(3).Range("V12")

但是在你使用 PasteSpecial 之前,你应该跟踪最后一次将数据粘贴到 Sheets("sheets3") 中的特定单元格中的位置 Sheet( "sheets3"), 例如: Sheets("Sheet3").Range("A1")

然后您就可以像这样将特殊内容粘贴到第 5 行下面的单元格中:

Sheets("sheet3").Range(Sheets("Sheets3").Range("A1").Offset(5,0) )。特殊粘贴 之后你更新 Sheets("Sheets3").Range("A1") = Sheets("sheet3").Range(Sheet s("Sheets3").范围("A1").偏移量(5,0)).地址

所以这应该可以完成工作:

    Private Sub CommandButton2_Click()
    Dim oWsSource as Worksheet
    Dim oWsDestination as Worksheet
    Set oWsDestination = ThisWorkbook.Worksheet("Sheets3")
    Set oWsSource = ThisWorkbook.Worksheet("Sheets2")
        'Do the copy
        oWsSource.OLEObjects("CheckBox1").Copy
        oWsDestination.Range(oWsDestination.Range("A1").Value).Offset(5,0)).PasteSpecial
        oWsDestination.Range("A1").Value = oWsDestination.Range(oWsDestination.Range("A1").Value).Offset(5, 0)).Address

    End Sub

使用全局变量。这些必须位于 sheet、模块或表单代码的顶部,高于所有子项和函数。

然后将其用作您范围内的行号。 Range("V" & lRow)

Private lRow As Long

Private Sub CommandButton2_Click()

    'Let's check if this is the first time the button has been used.
    If lRow = 0 then
        lRow = 7
    Else
        'Increment the row from the one we wrote to last time.
        lRow = lRow + 5
    End If

    'Do the copy
    Sheets("sheet2").OLEObjects("CheckBox1").Copy
    Sheets("sheet3").Range("V" & lRow).PasteSpecial

End Sub

此代码将查看您要粘贴到的 sheet 中已有多少个复选框,并为每个复选框添加 5 行,然后在最后一个复选框下粘贴 5 行。

Private Sub CommandButton2_Click()

' copy checkbox
Sheets("sheet2").OLEObjects("CheckBox1").Copy

Dim wks As Worksheet
Set wks = Sheets("Sheet3")

Dim cb As OLEObject, i As Integer

'determine how many boxes are already there and get count of cell to paste to
i = 7
For Each cb In wks.OLEObjects
    If InStr(1, cb.Name, "CheckBox") Then i = i + 5
Next

'paste new checkbox
Sheets("sheet3").Range("V" & i).PasteSpecial

End Sub

所有答案都将第一个复选框放在第一个复选框,但下一个将其再次放在与 before.I 相同的单元格中不知道是否重要,但我使用 excel 2010.