我有一个我无法解决的问题。我写了这段代码:
Private Sub CommandButton2_Click()
Sheets("sheet2").OLEObjects("CheckBox1").Copy
Sheets("sheet3").Range("V7").PasteSpecial
End Sub
此代码从V7单元格开始复制(第2页)到(第3页)的复选框。现在我希望下次按下命令按钮将数据粘贴到单元格V12,下一次粘贴到V17等。我的vba知识不是很好,你可以看到。
答案 0 :(得分:0)
我不知道你在Sheet(3).Range(“V7”)和Sheet(3)之间得到了什么数据.Range(“V12”)
但是在你是PasteSpecial之前,你应该跟踪最后一次在Sheet(“sheets3”)中的特定单元格中的Sheets(“sheets3”)中粘贴数据的位置,例如:Sheets(“Sheet3”) ).Range( “A1”)
然后你就可以在这样的5行下粘贴到这个单元格:
表( “表Sheet 3”)。范围(表( “Sheets3”)。范围( “A1”)。偏移(5,0))。PasteSpecial的 之后你更新表格(“表3”)。范围(“A1”)=表格(“表3”)。范围(表格(“表3”)。范围(“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
答案 1 :(得分:0)
使用全局变量。这些必须位于所有子和函数之上的工作表,模块或表单代码的顶部。
然后将其用作范围内的行号。 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
答案 2 :(得分:0)
此代码将显示您要粘贴的工作表中已有多少个复选框,并为每个复选框添加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 :(得分:0)
所有答案都放在第一个复选框,但下一个复选框再次放到同一个单元格中。我不知道它是否有问题,但我使用excel 2010。