【问题标题】:VBA formula to add new row with formulaVBA公式用公式添加新行
【发布时间】:2019-03-05 08:59:26
【问题描述】:

谁能帮我调整这段代码来修复我的解决方案?

我有一个按钮,可以从 A5 向下添加 x 数量的新行。 A - Z 列。

我希望新行为空白,但仍包含下拉菜单和公式。 VBA 新手,正在为此苦苦挣扎。

我想我需要更改范围并添加 xlPasteFormulas 但不确定两者的位置和方式。非常感谢任何帮助。

Option Explicit

Sub AddRows()

    Dim x As Integer

    x = InputBox("How many rows would you like to add?", "Insert Rows")

    'Selecting range to insert new cells
    Range(Cells(5, 1), Cells(x + 4, 1)).EntireRow.Insert

    'Copys current cell A6 and past in the new cells
    Cells(x + 5, 1).Copy Range(Cells(5, 1), Cells(x + 4, 1))

    'if you want the cells to be blank but still have the drop down options
    Range(Cells(5, 1), Cells(x + 4, 1)).ClearContents

End Sub

【问题讨论】:

  • 你昨天发过这个吗?我添加了一条评论,您只复制了 1 个单元格。 Cells(x + 5, 1).Copy
  • 是的,对不起。我尝试增加范围,但我不确定如何并且不断出现错误。我将如何将其更改为复制 A5:A26。我今天午餐时间有一个关于这本工作簿的演示文稿。
  • 看看/做一些研究,例如cells。您只使用 Cells(x + 5, 1).Copy 复制 1 行会放弃它,从哪里开始。 :o)

标签: excel vba button row formula


【解决方案1】:

请尝试以下代码。它将复制BaseRow 中的所有内容,然后删除该范围内的常量值,留下格式,包括数据验证和公式。

Sub AddRows()

    Const BaseRow As Long = 11   ' modify to suit

    Dim x As String             ' InputBox returns text if 'Type' isn't specified
    Dim Rng As Range
    Dim R As Long

    x = InputBox("How many rows would you like to add?", "Insert Rows")
    If x = "" Then Exit Sub
    R = BaseRow + CInt(x) - 1

    Rows(BaseRow).Copy          'Copy BaseRow
    'specify range to insert new cells
    Set Rng = Range(Cells(BaseRow, 1), Cells(R, 1))
    Rng.Insert Shift:=xlDown

    ' insert the new rows BEFORE BaseRow
    ' to insert below BaseRow use Rng.Offset(BaseRow - R)
    Set Rng = Rng.Offset(BaseRow - R - 1).Resize(Rng.Rows.Count, ActiveSheet.UsedRange.Columns.Count)
    Rng.Select
    On Error Resume Next
    Rng.SpecialCells(xlCellTypeConstants).ClearContents
    Application.CutCopyMode = False '
End Sub

代码现在有一个紧急出口:如果您没有在 InputBox 中输入任何内容,程序将终止。请注意,新行将插入BaseRow 上方。插入后,所有新行和旧行都是相同的。然后,您可以选择在这些行的第一行或最后一行中保留常量,这实际上意味着在BaseRow 上方或下方插入新的空白行。

【讨论】:

  • 这适用于一个新的工作表,但是一旦我将标题添加到我的表格中,就会弹出一个运行错误“1004”,说“这不起作用,因为它会在你的表格中移动单元格工作表。我点击调试,它突出显示“Rng.Insert Shift:=x1Down”任何帮助都非常感谢
  • 您的 BaseRow 在表格中这一明显事实是您至今保存完好的秘密。您可以尝试在 BaseRow 下方添加行,如果这符合您的目的,希望 Excel 不会考虑“在表格中移动单元格”。如果这对您不起作用,则必须重新表述整个问题。因为那将是一个完全不同的问题,从技术上讲,改写不能在同一个线程中完成。除了我,几乎没有人会在这里看到它,我不会允许改变。在这种情况下提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2023-01-10
  • 2015-10-09
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多