我真的希望有人可以帮我这个。我已经记录了一个要在工作表中使用的宏,该工作表需要在2个工作表上的相同位置创建一行,然后在其中一个工作表中,从其下面的行中复制公式。我的代码看起来像这样 -
Sub Macro1()
Sheets(Array("SCHEDULE", "ANNUAL SUMMARY")).Select
Sheets("SCHEDULE").Activate
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("ANNUAL SUMMARY").Select
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
Selection.AutoFill Destination:=ActiveCell.Offset(-1, 0).Rows("1:2").EntireRow _
, Type:=xlFillDefault
ActiveCell.Offset(-1, 0).Rows("1:2").EntireRow.Select
Sheets("SCHEDULE").Select
ActiveCell.Select
我的问题是,当我手动运行然后记录宏时,它完全符合我的要求,但是当我从“SCHEDULE”表上的按钮运行它时,它不会从行中复制公式低于“年度总结”表中的那个。
任何人都可以帮我解决这个问题吗?
提前全部谢谢
标记
答案 0 :(得分:0)
宏录制器的问题在于,虽然它可以很好地指示您需要什么代码,但它也会生成效率非常低的代码,并且包含您需要尝试避免使用的所有select和activate语句。
代码中ActiveCell
的任何引用都指的是当前选中的单元格,ActiveSheet
是当前选中的工作表。如果您从另一个记录宏的工作表中运行宏,这可能会给您带来不希望的结果......
如果您想从SCHEDULE表中复制第1行,则可以使用
Sheets("SCHEDULE").Rows(1).Copy Sheets("ANNUAL SUMMARY").Rows(1)
如果要自动填充范围,可以使用一行代码
来完成这将自动将第1行(A列 - E列)的内容填充到您的年度摘要表中的第100行
Sheets("ANNUAL SUMMARY").Range("A1:E100").FillDown
因此,如果我们将它们放在一起并包含一些声明来源和目标表,以使子更具可读性。
Sub CopyAndFillDownExample()
Dim rowNumber As Long, offset As Long
Dim sourceSht As Worksheet, destinationSht As Worksheet
'set the source and destinationsheets
Set sourceSht = Sheets("SCHEDULE")
Set destinationSht = Sheets("ANNUAL SUMMARY")
'number of rows to copy down
offset = 100
'get currently selected row
rowNumber = ActiveCell.Row
'copy the selected row from the source sheet to the destination sheet
sourceSht.Rows(rowNumber).Copy destinationSht.Rows(rowNumber)
'fill down the formulas
destinationSht.Rows(rowNumber & ":" & rowNumber + offset).FillDown
End Sub