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