Excel中的VBA代码将行添加到多个工作表,然后从相邻行复制公式

时间:2013-11-27 19:08:18

标签: excel vba excel-vba

我真的希望有人可以帮我这个。我已经记录了一个要在工作表中使用的宏,该工作表需要在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”表上的按钮运行它时,它不会从行中复制公式低于“年度总结”表中的那个。

任何人都可以帮我解决这个问题吗?

提前全部谢谢

标记

1 个答案:

答案 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