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