请求编写可重复执行的VBA代码:复制当前行插入至下方行
解决Excel宏动态复制新增行的需求
原录制的宏因硬编码固定行号,只能重复复制第10行到第11行,无法实现「首次复制第10行到11行、后续每次复制上一次新增行」的需求。以下是修改后的代码及说明:
修改后的VBA代码
Sub CopyDynamicRow() Dim ws As Worksheet Dim sourceRow As Integer Dim prop As DocumentProperty Set ws = ThisWorkbook.Worksheets("SUMMARY") ' 检查是否存在存储源行号的自定义属性 On Error Resume Next Set prop = ThisWorkbook.CustomDocumentProperties("LastSourceRow") On Error GoTo 0 If prop Is Nothing Then ' 首次执行:源行设为10,创建属性记录下次执行的源行 sourceRow = 10 ThisWorkbook.CustomDocumentProperties.Add _ Name:="LastSourceRow", _ LinkToContent:=False, _ Type:=msoPropertyTypeNumber, _ Value:=sourceRow + 1 Else ' 非首次执行:读取记录的源行号,更新下次执行的源行 sourceRow = prop.Value prop.Value = sourceRow + 1 End If ' 执行插入与复制操作(避免使用Select提升效率) ws.Rows(sourceRow + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ws.Rows(sourceRow).AutoFill Destination:=ws.Rows(sourceRow & ":" & sourceRow + 1), Type:=xlFillDefault End Sub
代码核心逻辑
- 状态记录:通过工作簿的
CustomDocumentProperties存储每次执行后的源行号,避免宏每次执行时重置状态 - 动态行号:首次执行默认源行为10,后续每次执行自动将源行号递增1
- 高效操作:移除原代码中的
Select操作,直接对工作表行对象进行操作,提升代码稳定性与执行速度
使用方法
- 打开Excel的VBA编辑器(按
Alt+F11) - 找到原宏所在的模块,替换为上述代码
- 将宏绑定到命令按钮,点击按钮即可按需求重复执行:
- 首次点击:复制第10行插入到第11行
- 后续点击:依次复制第11行→第12行、第12行→第13行,支持无限重复
内容的提问来源于stack exchange,提问作者elmo51
相关产品推荐
相关产品推荐

