我是Excel VBA的新手 .
我试图将一系列数据从一个工作表复制到同一工作簿中的另一个工作表 .
因此,在Sheet1中复制范围(“A2:B10”)然后在Sheet2中粘贴(“A2”) .
每次运行宏时,我都希望将(“Sheet 1”)中的值 . 范围(“A2:B10”)粘贴到连续列中,因此在本例中为Sheet 2中的“B2” .
谢谢你的帮助!
我有第一部分,但在第二部分挣扎:
Sub sbCopyRangeToAnotherSheet()
'Set range
Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
'Copy the data
Sheets("Sheet1").Range("A2:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("A2").Select
'Paste in the target destination
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
2 回答
你的代码很奇怪
这一行
Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
正在一行中复制和粘贴 . 因此,您的后续行.copy
.activate
.select
和.paste
是多余的 . 你的第一行已经完成了所有这些 .您需要识别Sheet2的Row "A"中最后使用的列 . 为此,您可以使用范围的
.End()
方法查找行中第一个占用的单元格 . 然后使用该单元格作为副本Destination
:这可以在不使用
Active
和Select
的情况下完成工作:代码中最棘手的部分是开始在目标工作表上的正确列上编写 . 如果工作表为空,则正确的列是第一个 . 在所有其他情况下,正确的列是最后一列1 .
查找上次使用的列的标准方法 -
Range.End(xlToLeft).Column
将始终将第一列作为最后使用的列返回,无需关注是否使用 . 因此,你需要某种检查,以确定它是否为空:WorksheetFunction.CountA(.Columns(1)) > 0