2015-10-05 55 views
0

我有我不能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知识不是很好,如你所见。

回答

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 
0

我不知道你在表(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 
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 
+0

我可能是错的这个,但是如果工作簿被关闭,然后重新打开'lRow'将重置为0,并且计数器将重新开始并粘贴复选框(如果已经存在的话)。 –

+0

这是真的。 OP没有声明每次打开工作簿时都需要从底部开始。如果是这样,他可以找到最后一个并使用它。 – MatthewD

0

一切答案将第一个复选框,但下一个再次把它同一个小区的before.I不知道它的问题,但我用Excel 2010中