VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表

Posted

技术标签:

【中文标题】VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表【英文标题】:VBA - Applying Autofill with inserted rows (based on input box) and apply it to other sheet 【发布时间】:2020-03-31 10:18:14 【问题描述】:

我有一个基于输入用户框添加新闻行的宏,我想使用自动填充来保持公式和尽可能相同的布局。

示例:我想在 sheet1 中添加 4 个额外的产品。现在,宏(我的按钮)在第 24 行(Product1)、第 28 行和第 32 行下方创建 4 个新行。我想将 O、AB、AO、BB 和 BO 列中的原始公式应用于新插入的行。如何调整以下代码?

Sub NewPoS()

Application.ScreenUpdating = False
Dim MyN As String
Dim i As Long, MyMarker As Long, MyM As Long, LstRW As Long
Dim ws As Worksheet: Set ws = Feuil1

MyN = InputBox("Give me a number", "My Input Box")
If Not IsNumeric(MyN) Then Exit Sub
MyN = CInt(MyN)
For MyMarker = 1 To 5
LstRW = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
MyM = Application.Match("Marker" & MyMarker, ws.Range(ws.Cells(1, 1), ws.Cells(LstRW, 1)), 0)
    For i = 1 To MyN
        ws.Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Next i
Next MyMarker

End Sub

此外,我想在 sheet2 上做完全相同的事情,但其中单元格的值与 sheet1 相同(已设置)

感谢您的帮助!

【问题讨论】:

1) 你写的 “在第 24 行(Product1)、第 28 行和第 32 行下方创建 4 个新行”,即低于三行,而按照您的代码应该在五行以下创建行 (For MyMarker = 1 To 5)。 2) 为什么要从找到的行下方的第三行插入行 (ws.Rows(MyM + 2).EntireRow.Insert shift:=xlUp)? 【参考方案1】:

如果要复制 1 行中已有的所有公式,可以使用以下命令:

secondRange.Formula = firstRange.Formula

其中 secondRange 和 firstRange 都是范围对象。因此,例如,如果您在工作表的第一行中拥有所需的所有公式,则可以将第一个范围分配给范围对象:

Dim firstRange As Range
Set firstRange = Range("A1:BO1")

然后在创建新行的循环中,粘贴公式:

For i = 1 To MyN
    ws.Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Range("A" & (MyN + 2) & ":BO" & (MyN + 2)).Formula = firstRange.Formula
Next i

或者,如果您想一次获得一个公式,您也可以这样做。这是一个类似的命令,但不是 range2.Formula = range1.Formula 而是一次一个单元格,比如

Cells(MyN + 2, 15).Formula = Cells(1, 15).Formula

第二张纸也是一样的。您可以创建第二个循环以将所有值插入第二张工作表中,只需确保每次引用单元格或区域时都引用工作表名称或索引号。

For i = 1 To MyN
    Sheets(2).Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Sheets(2).Range("A" & (MyN + 2) & ":BO" & (MyN + 2)).Formula = firstRange.Formula
Next i

Sheets(2).Cells(MyN + 2, 15).Formula = Sheets(1).Cells(1, 15).Formula

【讨论】:

嗨!谢谢回复。 Set firstRange = Range("A1:BO") 这一行似乎有问题。它说错误 1004,对象“全局”的方法范围失败。 在我的情况下,具有公式的第一行是#24(范围可能是 Range("A24:B024"),如果我输入,没有错误,但它不会复制公式 这可能是因为我忘记包含 BO 列的行号。我会编辑那个。至于为什么它不为你复制公式我不确定,也许如果你发布你的新代码......

以上是关于VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA在IE11中使用自动完成填充文本框

使用 VBA 插入一行并自动填充

vba excel怎么获取指定工作表的行数、列数

自动填充可变行数

基于列的Excel flash自动填充行

尝试使用 sql/vba 的结果填充文本框并出现 #Name 错误