Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 复制和粘贴的正确方法_Excel_Vba - Fatal编程技术网

Excel 复制和粘贴的正确方法

Excel 复制和粘贴的正确方法,excel,vba,Excel,Vba,我在excel中创建了这段代码,它创建了某个范围的副本,然后打开另一个工作簿并将此数据粘贴到正确的范围中。有时,当我对代码进行一些调整时,它不再正常工作。所以我做了一些研究,现在我想我可以对我的代码进行一些升级,但我不确定如何升级 我的代码的基础 代码首先搜索要复制的区域,然后打开另一个工作簿。在此工作簿中,找到要粘贴数据的区域,然后将复制的数据粘贴到该区域。作业本关上了 这是我在谷歌上找到的 我在谷歌上发现了这段代码(它基于不同的代码),但也许我可以用这段代码来升级我的代码,这样会更可靠 Sh

我在excel中创建了这段代码,它创建了某个范围的副本,然后打开另一个工作簿并将此数据粘贴到正确的范围中。有时,当我对代码进行一些调整时,它不再正常工作。所以我做了一些研究,现在我想我可以对我的代码进行一些升级,但我不确定如何升级

我的代码的基础 代码首先搜索要复制的区域,然后打开另一个工作簿。在此工作簿中,找到要粘贴数据的区域,然后将复制的数据粘贴到该区域。作业本关上了

这是我在谷歌上找到的 我在谷歌上发现了这段代码(它基于不同的代码),但也许我可以用这段代码来升级我的代码,这样会更可靠

Sheets("All_Rentals").Range("AA8") = .Range("B34").Value
我尝试使用此代码,但没有任何好结果,我尝试了以下内容:

Rngp = rngc
但我不认为它是这样工作的,那么我能做什么呢

这是我代码的一部分

复制特定范围的代码:

Dim rngc As Range
Set rngc = 
Workbooks(ThisFile).Sheets("Planning").Range(Cells(11,Weekcolumn.Column), 
Cells(12, Weekcolumn.Offset(0, 106).Column))
rngc.copy
查找要粘贴的范围的代码:

Dim CurrentBureauWeek As String
        CurrentBureauWeek = 
Workbooks(ThisFile).Sheets("Planning").Range("D3").Value

With Workbooks("Bureauplanning.xlsm").Sheets("Planning").Range("M10:DM10")
Set ThisWeek = .Find(What:=CurrentBureauWeek, LookIn:=xlValues, 
LookAt:=xlWhole, MatchCase:=False, Searchformat:=False)
If Not ThisWeek Is Nothing Then

End If
End With


Dim Thisprojecrow As Range

With Workbooks("Bureauplanning.xlsm").Sheets("Planning").Range("A:A")
Set Thisprojectrow = .Find(What:=Thisproject, LookIn:=xlValues, 
LookAt:=xlWhole, MatchCase:=False, Searchformat:=False)
If Not Thisprojectrow Is Nothing Then

End If
End With
粘贴数据的代码:

Dim rngp As Range
Set rngp= Workbooks("Bureauplanning.xlsm"). 
Sheets("Planning").Cells(Thisprojectrow.Offse t(-2, 0).row, 
ThisWeek.Column)
rngp.PasteSpecial Paste:=xlPasteValues

我希望有人能帮助我升级我的代码,使其更好地工作。

Rngp=rngc
应该可以工作,但是省略
。复制
,因为不需要使用此功能

在您提供的代码中,您正在使用
xlPasteValues

更快的方法是将范围A的值设置为等于范围B的值。换句话说:

Range(DestinationRange).Value = Range(CopyRange).Value
这将把
=
后面的范围中的值粘贴到第一个范围

请注意,为了复制所有值,这些范围的大小必须相等

因此,对于您的代码(以范围为例):

编辑OP的评论

Workbooks("Book2").Sheets(1).Range("L20:L30").Value = Workbooks("Book1").Sheets(1).Range("A1:A10").Value

Rngp=rngc
应该可以工作,但是省略
.Copy
,因为不需要使用此功能

在您提供的代码中,您正在使用
xlPasteValues

更快的方法是将范围A的值设置为等于范围B的值。换句话说:

Range(DestinationRange).Value = Range(CopyRange).Value
这将把
=
后面的范围中的值粘贴到第一个范围

请注意,为了复制所有值,这些范围的大小必须相等

因此,对于您的代码(以范围为例):

编辑OP的评论

Workbooks("Book2").Sheets(1).Range("L20:L30").Value = Workbooks("Book1").Sheets(1).Range("A1:A10").Value
有些选择是:

Option Explicit

Sub test()

    Dim wb1 As Workbook, wb2 As Workbook
    Dim rng1 As Range, rng2 As Range

    Set wb1 = Workbooks("Book1") '<- Make sure both workbooks are open
    Set wb2 = Workbooks("Book2")

    Set rng1 = wb1.Worksheets("Sheet1").Range("A1:B2")
    Set rng2 = wb2.Worksheets("Sheet1").Range("A1")

    'Copy Contents and Formatting
    rng1.Copy rng2

    'Copy Contents
    rng1.Copy
    rng2.PasteSpecial Paste:=xlPasteValues

End Sub
选项显式
子测试()
将wb1设置为工作簿,将wb2设置为工作簿
变暗rng1为范围,rng2为范围
Set wb1=工作簿(“Book1”)”一些选项包括:

Option Explicit

Sub test()

    Dim wb1 As Workbook, wb2 As Workbook
    Dim rng1 As Range, rng2 As Range

    Set wb1 = Workbooks("Book1") '<- Make sure both workbooks are open
    Set wb2 = Workbooks("Book2")

    Set rng1 = wb1.Worksheets("Sheet1").Range("A1:B2")
    Set rng2 = wb2.Worksheets("Sheet1").Range("A1")

    'Copy Contents and Formatting
    rng1.Copy rng2

    'Copy Contents
    rng1.Copy
    rng2.PasteSpecial Paste:=xlPasteValues

End Sub
选项显式
子测试()
将wb1设置为工作簿,将wb2设置为工作簿
变暗rng1为范围,rng2为范围

Set wb1=工作簿(“Book1”)提示:在确定要粘贴的范围之前,不要复制。Excel有一个清除剪贴板的奇怪习惯。所以步骤应该是1。标识要复制的范围。将其存储在范围对象2中。标识需要粘贴复制范围的范围。将其存储在范围对象中。3.复制并立即粘贴。避免在这两者之间执行任何其他操作(除了
DoEvents
如果需要)。很难从代码中分辨出来,但很可能复制的区域与粘贴的区域不同,或者如@SiddharthRout所述,复制的对象在这两者之间以某种方式被清除。你能给我们提供一个错误代码吗?它挂在某一行上了吗?@SiddharthRout谢谢你的提示,我会尝试挂起来的。@rohrl77我得到了错误代码:excel vba error 1004 Paste range类的特殊方法失败。所以当我做出决定的时候,它可能已经消失了adjustments@JellevanderHeijden如果你找到了你想要的答案,请投票,以帮助其他人回答相同的问题。提示:在确定要粘贴的范围之前,不要复制。Excel有一个清除剪贴板的奇怪习惯。所以步骤应该是1。标识要复制的范围。将其存储在范围对象2中。标识需要粘贴复制范围的范围。将其存储在范围对象中。3.复制并立即粘贴。避免在这两者之间执行任何其他操作(除了
DoEvents
如果需要)。很难从代码中分辨出来,但很可能复制的区域与粘贴的区域不同,或者如@SiddharthRout所述,复制的对象在这两者之间以某种方式被清除。你能给我们提供一个错误代码吗?它挂在某一行上了吗?@SiddharthRout谢谢你的提示,我会尝试挂起来的。@rohrl77我得到了错误代码:excel vba error 1004 Paste range类的特殊方法失败。所以当我做出决定的时候,它可能已经消失了adjustments@JellevanderHeijden如果你找到了你正在寻找的答案,请投票,以帮助其他人回答相同的问题。啊,谢谢,我不知道复制和粘贴范围必须是相同的大小,是否有一种方法可以使复制的范围在“开始单元格”中过去?因此,我复制了一个范围,例如A1:A10,然后将其粘贴到单元格L20中的另一个工作簿中。如果使用此方法,则范围必须相等。要使用
.Copy
,只能定义起始单元格。记住我的解释,这个方法是说
Range(targetrange)=Range(copyrange)
。我已经把你的例子添加到我的回答中了,我知道在代码中可以使用偏移量,我也可以用这个代码吗?是的。您所做的只是定义两个范围。不管你怎么做,只要它们都是两个有效范围!请注意,使用
.Copy
比此方法慢。啊,谢谢,我不知道复制和粘贴范围必须是相同的大小,是否有一种方法可以使复制范围在“开始单元格”中通过?因此,我复制了一个范围,例如A1:A10,然后将其粘贴到单元格L20中的另一个工作簿中。如果使用此方法,则范围必须相等。要使用
.Copy
,只能定义起始单元格。记住我的解释,t