Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 运行时错误1004复制和粘贴accross工作表_Excel_Vba - Fatal编程技术网

Excel 运行时错误1004复制和粘贴accross工作表

Excel 运行时错误1004复制和粘贴accross工作表,excel,vba,Excel,Vba,我想将两个工作表中的数据合并到一个工作表中 “PUF”工作表包含一个较大的数据集,所有案例按“ID”排序。 这些病例ID的较小子集在第二张名为“ADHD”的工作表中包含额外数据 我的目标是复制较小的“ADHD”工作表中的附加数据,并将其粘贴到“PUF”工作表中的数据旁边。ID必须匹配 这是我写的代码 Sub copypuf() For x = 2 To 2967 'get ID number of case in ADHD worksheet Dim y As Long y = Work

我想将两个工作表中的数据合并到一个工作表中

“PUF”工作表包含一个较大的数据集,所有案例按“ID”排序。 这些病例ID的较小子集在第二张名为“ADHD”的工作表中包含额外数据

我的目标是复制较小的“ADHD”工作表中的附加数据,并将其粘贴到“PUF”工作表中的数据旁边。ID必须匹配

这是我写的代码

Sub copypuf()

For x = 2 To 2967

'get ID number of case in ADHD worksheet

Dim y As Long

y = Worksheets("ADHD").Cells(x, 1).Value

y = y + 1

'Copy cells from from ADHD worksheet, into the respective ID number on original data sheet

Worksheets("ADHD").Range(Cells(x, 1), Cells(x, 261)).Copy Worksheets("PUF").Range(Cells(y, 368), Cells(y, 628))

Next x

End Sub
我得到的错误消息是“运行时错误1004;应用程序定义或对象定义错误”

请帮忙,我很没经验


如果通过创建范围对象变量并将其指定给工作表范围(您希望数据流向的位置),使用范围对象会有所帮助

 Sub copypuf()
  Dim x As Long
  Dim r1 As Range 'range for smaller dataset
  Dim r2 As Range 'range for larger dataset
  Dim r4 As Range 'range to check if find is a success
  Dim ws1 As Worksheet, ws2 As Worksheet
  Dim y As Long
 Set ws1 = ThisWorkbook.Worksheets("ADHD") 'smaller dataset copy to the below larger dataset
 Set ws2 = ThisWorkbook.Worksheets("PUF") 'larger dataset get values from above offset
y = 1

 Dim idNum As Variant

 With ws1
    Set r1 = .Range(.Cells(2, 1), .Cells(2967, 261)) 'ADHD range
 End With

For x = 1 To r1.Rows.Count

    idNum = r1.Item(x, 1).Value 'get ID number in ADHD worksheet

    y = y + 1

With ws2
    Set r2 = .Range(.Cells(y, 368), .Cells(y, 628)) 'PUF range
End With

 'Copy cells from from ADHD worksheet, into the respective ID number on       original data sheet
With r1 ''copy the cells from the range
    Range(.Cells(x, 1), .Cells(x, .Columns.Count)).Copy
End With

Set r4 = r2.Find(idNum) 'Find the next id number if it is not found nothing is returned

If Not r4 Is Nothing Then
    With r2
        .Offset(0, .Columns.Count).PasteSpecial (xlPasteValues)
    End With
 End If
    Set r2 = Nothing
    Set r4 = Nothing
Next x
Set r1 = Nothing
Set ws1 = Nothing
Set ws2 = Nothing

End Sub

您需要使用工作表限定
单元格()
,就像对
范围()
所做的一样。常规代码模块中的“独立”单元格()总是指ActiveSheet@Devakotia你有机会试一下吗?我已经纠正了DaveXcel提到的错误。
y
以什么开头?y以“idNum”开头,y+1表示头一行有变量名。这完全不符合OP的要求@devakotia我在测试后完全修改了我的代码,只要我正确地解释了您想要的内容,它就应该完全按照您的要求执行。@ClintStreet-也许您可以解释一下您认为它是如何偏离要求的?从“我的目标是在较小的ADHD中复制附加数据”这个问题,并将其粘贴到“PUF”工作表中的数据旁边。ID必须匹配。”只要PUF工作表包含连续排序的ID号列表(从第二行的1开始)那么为什么这个代码不起作用呢?我是从OP发布的代码开始的。是的,假设它是一个连续的列表,经过排序,它会起作用。OP提到他们缺乏经验,需要帮助,所以我认为代码与OP要求的不匹配。为什么他会提到ID必须匹配。这说明得很糟糕stion,因为如果它是两个相同的排序列表,则ID并不重要。
Sub copypuf()
    Dim y As Long

    For x = 2 To 2967

        y = Worksheets("ADHD").Cells(x, 1).Value + 1

        Worksheets("ADHD").Cells(x, 1).Resize(1, 261).Copy _   
                            Worksheets("PUF").Cells(y, 368)
    Next x

End Sub