VBA技术求助:插入行后设置列值并填充指定列公式
解决方案
问题分析
原代码中Worksheets("MIDP + IRS").Range("I:N").FillDown未生效的核心原因是直接对整列执行填充操作,Excel无法识别需要继承公式的来源行;同时H列的复制逻辑冗余,无需用循环实现。
修改后的完整代码
Sub InsertRowAndFillDown() Dim rw As Long Dim ws As Worksheet ' 明确指定目标工作表,避免依赖当前激活表 Set ws = ThisWorkbook.Worksheets("MIDP + IRS") rw = ActiveCell.Row ' 在当前单元格下方插入新行 ws.Rows(rw + 1).EntireRow.Insert ' 设置新行G列的值为2 ws.Cells(rw + 1, "G").Value = 2 ' 复制上一行H列的值到新行H列 ws.Cells(rw + 1, "H").Value = ws.Cells(rw, "H").Value ' 向下填充I:N列公式(仅针对上一行和新行的范围) ws.Range(ws.Cells(rw, "I"), ws.Cells(rw + 1, "N")).FillDown ' 向下填充AJ:AP列公式 ws.Range(ws.Cells(rw, "AJ"), ws.Cells(rw + 1, "AP")).FillDown End Sub
关键修改说明
- 锁定操作工作表:通过
Set ws = ThisWorkbook.Worksheets("MIDP + IRS")明确操作对象,避免因切换工作表导致代码执行异常。 - 简化H列复制逻辑:直接通过单元格引用赋值,替代冗余的循环代码,提升可读性和执行效率。
- 精准填充公式范围:选择包含上一行(已有公式)和新行的连续区域执行
FillDown,让Excel明确公式继承来源,解决原整列填充无效的问题。
内容的提问来源于stack exchange,提问作者sfen90
相关产品推荐
相关产品推荐

