副本复选框与命令按钮每5个细胞
问题描述:
我有我不能solve.I写这个代码的问题:副本复选框与命令按钮每5个细胞
Private Sub CommandButton2_Click()
Sheets("sheet2").OLEObjects("CheckBox1").Copy
Sheets("sheet3").Range("V7").PasteSpecial
End Sub
这段代码复制一个复选框从(表2)(表3 )从V7单元开始。现在我想要下次按命令按钮将数据粘贴到单元格V12,下一次到V17等。我的vba知识不是很好,如你所见。
答
此代码会看到有多少复选框已经在要粘贴到表,并添加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
答
我不知道你在表(3).Range( “V7”)和片(3).Range( “V12”)
之间有什么样的数据,但探微你PasteSpecial的面前,你768,16跟踪最后一次在Sheet(“sheets3”)中特定单元格中的表格中粘贴数据的位置(“sheets3”),例如:表格(“Sheet3”)。Range(“A1”)
Then (“Sheet3”)。范围(表格(“表格3”)。范围(“A1”)。偏移(5,0))您可以粘贴特定于此单元的第5行,如下所示:
表.PasteSpecial 之后您更新表格( “Sheets3”)。Range(“A1”)= Sheets(“sheet3”)。Range(Sheets(“Sheets3”)。Range(“A1”)。Offset(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
答
使用一个全局变量。这些必须位于表单,模块或表单代码的顶部,高于所有子和功能。
然后用它作为你范围内的行号。 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
答
一切答案将第一个复选框,但下一个再次把它同一个小区的before.I不知道它的问题,但我用Excel 2010中
我可能是错的这个,但是如果工作簿被关闭,然后重新打开'lRow'将重置为0,并且计数器将重新开始并粘贴复选框(如果已经存在的话)。 –
这是真的。 OP没有声明每次打开工作簿时都需要从底部开始。如果是这样,他可以找到最后一个并使用它。 – MatthewD