【问题标题】:VBA code in Excel to add a row to multiple sheets and then copy formula from adjacent rowExcel中的VBA代码将一行添加到多个工作表,然后从相邻行复制公式
【发布时间】:2013-11-27 19:08:17
【问题描述】:

我真的希望有人可以帮助我解决这个问题。我已经记录了一个要在需要在 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”表上的按钮运行它时,它不会从行中复制公式在“年度摘要”表上的下方。

谁能帮我解决这个问题?

提前谢谢大家

标记

【问题讨论】:

标签: vba excel


【解决方案1】:

宏记录器的问题在于,虽然它可以很好地指示您需要什么代码,但它也会生成非常低效的代码,并且包含您需要尝试避免使用的所有选择和激活语句。

代码中对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 更具可读性..


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

【讨论】:

  • 谢谢山姆。在这种情况下我将如何使用它?如果宏在两张纸上都创建了新行(并且做得很好),那么我将如何仅针对需要使用您提供的代码填充的特定行?
  • 我刚刚在我的答案中添加了一行代码,演示了复制一行。因此,您可以将行复制到新工作表,然后在您复制到的工作表上自动填写。您是否总是将数据复制到目标工作表中的固定位置?即第1行
  • 因此,其工作方式是使用工作簿的人在他们希望在工作表 1 上创建新行(通常在 A 列)下方的行上选择一个单元格。然后他们需要运行创建此行和另一个工作表(表 2)上的行的宏,其行号与表 1 上的行相对应。然后需要使用已创建的行下方的公式填充表 2 上的行(因此保持公式的连续模式) - 这有意义吗?
  • 多列有公式需要复制
  • 非常感谢@Sam。你的代码真的让我想到了一种不同的(更简单)的方式来做我最终需要这个工具来做的事情,并以不同的方式思考它,这变得更有效。我最终只在工作表 1 上有一个按钮,该按钮插入了一行,然后是一个 worksheet_activate 宏,它只是将参考行复制到接下来的 50 行 - 就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多