VBA-复制区域和粘贴区域不为';同样大小的错误不是吗?
你好!我有下面的代码,它给了我一个错误“我们不能粘贴,因为复制区和粘贴区大小不一样”。。请帮助解决这些代码的问题…:( 下面是我的功能VBA-复制区域和粘贴区域不为';同样大小的错误不是吗?,vba,excel,Vba,Excel,你好!我有下面的代码,它给了我一个错误“我们不能粘贴,因为复制区和粘贴区大小不一样”。。请帮助解决这些代码的问题…:( 下面是我的功能 Option Explicit Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(what:="*", _ After:=sh.Range("A1"), _
Option Explicit
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(what:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
Function LastCol(sh As Worksheet)
On Error Resume Next
LastCol = sh.Cells.Find(what:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function
您的源范围定义为
完整列
。因此,您不能将它们粘贴到任何位置,除非粘贴到目标工作表的第一行
请记住,工作表中的行数是有限的:1048576
Excel 2007和更高版本中的行(65536
Excel 2003中的行)。因此,当您尝试将整列粘贴到非第一行的某处时,副本将超过目标中最后可用的行
您可以只获取源列的已使用部分,希望在目标工作表中为它们留出空间。为此,请更改定义源范围的方式,以便只获取已使用部分。即:
Set CopyRng = sh.UsedRange.Columns("A:G")
' ^^^^^^^^^^^^^^^^^^^
对设置CopyRng
的所有情况都执行相同的操作
或者,您可以使用与目标工作表相同的方法查找源工作表的最后使用的行和最后使用的列。此选项应该更准确、更安全。Wow!感谢您的帮助!它工作得很好!但为什么标题也被复制?抱歉,我在中还是新手VBA@jhovyn因为你在复制e所有内容。如果您想跳过复制的第一行,请使用
Set CopyRng=sh.UsedRange.Columns(“A:G”).Offset(1)
。谢谢!先生,最后一个问题,为什么我的数据复制在“Sheet3”中乘以3?…我的工作表1、工作表2、工作表3上的数据有3个数据。@jhovyn我看不出有任何原因。请检查wb中是否有隐藏的工作表,或者尝试重新检查数据。@jhovyn-除了“RDBMergeSheet”、“信息”、“工作表1”、“工作表2”和“工作表3”之外,您的工作簿中还有其他工作表吗?如果您这样做,您的代码将为其他每一张工作表执行一份副本(从“Sheet1”、“Sheet2”或“Sheet3”)。因此,例如,如果您的工作簿中有7张工作表,则您总共要执行5份副本-除了“RDBMergeSheet”和“Information”之外,每一张工作表都要执行一份副本。
Set CopyRng = sh.UsedRange.Columns("A:G")
' ^^^^^^^^^^^^^^^^^^^