EXCEL VBA-从X行复制数据插入到Y_Z行

vbnet 复制代码
Sub 从第X行复制数据插入到第Y行到Z行(表对象 As Worksheet, 数据来自X行, 插入开始于Y行 As Long, 插入结束于Z行 As Long, Optional 模式_插入加复制 As Integer = 3)
    '从X行复制数据插入到Y_Z行
    插入数据并复制 表对象, 插入开始于Y行, 数据来自X行, 插入结束于Z行 - 插入开始于Y行 + 1, 模式_插入加复制
End Sub

Sub 插入数据并复制(SheetA As Worksheet, 插入到X行 As Long, ByVal 数据来源行Y As Long _
    , Optional ByVal N行 As Long = 1, Optional 模式_插入加复制 As Integer = 3) '
    '功能说明:在第X行位置插入N行,用Y行的内容克隆填充(复制粘入N次,不占用剪贴板)
    '模式 = 1 '只插入,模式=2,只复制,模式=3同时执行
    
    '难点:主要就是有公式,所以头大,代码还能优化吗,如何取函数名称更直观易懂
    '不用中文,英文当词是真没法写。

    
    ' 禁用屏幕更新和计算以提升性能
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    If 模式_插入加复制 = 2 Then  ' 只复制
        '不插入
    Else
        '在第X行位置插入N行
        SheetA.Rows(插入到X行 & ":" & 插入到X行 + N行 - 1).Insert Shift:=xlDown
        If 数据来源行Y > 插入到X行 Then
            数据来源行Y = 数据来源行Y + N行 - 1
        End If
    End If
      If 模式_插入加复制 = 1 Then GoTo DoEND
      
    '复制第10行内容到第1-5行
    '直接传输第10行数据到第1-5行(不经过剪贴板)或X+5-1行
    '不自个封装一下,代码是守全看不懂
    With SheetA
        .Rows(数据来源行Y).Copy Destination:=.Rows(插入到X行 & ":" & (插入到X行 + N行 - 1))
        ' 清除复制后保留的虚线边框
        Application.CutCopyMode = False
    End With
    
DoEND:
    ' 恢复设置
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

优化说明

  1. 命名规范‌:

    • 使用英文命名,遵循VBA惯例
    • 函数名采用动词+名词结构(如CopyDataFromRowToRange)
    • 参数名明确表达用途(如ws表示工作表对象)
  2. 枚举类型‌:

    • 定义OperationMode枚举,包含三种操作模式
    • 使代码更易读且类型安全
  3. 公式处理‌:

    • 添加了ws.Calculate强制重算公式
    • 确保复制的公式能正确计算
  4. 性能优化‌:

    • 保持原有的屏幕更新和计算设置
    • 添加了错误处理
  5. 代码结构‌:

    • 层次分明,逻辑清晰
    • 添加了详细的参数说明注释

此优化版本在保持原有功能的基础上,显著提高了代码的可读性和维护性,特别适合处理包含公式的Excel数据操作。

vbnet 复制代码
Private Enum OperationMode ' 操作模式枚举
    InsertOnly = 1
    CopyOnly = 2
    InsertAndCopy = 3
End Enum
' 主函数:从指定行复制数据插入到目标行范围
Sub CopyDataFromRowToRange(ws As Worksheet, sourceRow As Long, _
                          startRow As Long, endRow As Long, _
                          Optional mode As OperationMode = InsertAndCopy)
    ' 参数说明:
    ' ws - 工作表对象
    ' sourceRow - 数据来源行号
    ' startRow - 插入开始行号
    ' endRow - 插入结束行号
    ' mode - 操作模式(枚举值)    
    ' 调用核心处理函数
    InsertAndCopyData ws, startRow, sourceRow, endRow - startRow + 1, mode
End Sub
vbnet 复制代码
' 核心处理函数:插入行并复制数据
Sub InsertAndCopyData(ws As Worksheet, insertRow As Long, _
                    sourceRow As Long, rowCount As Long, _
                    Optional mode As OperationMode = InsertAndCopy)
    ' 参数说明:
    ' insertRow - 插入开始行号
    ' sourceRow - 数据来源行号
    ' rowCount - 要插入的行数
    ' mode - 操作模式(枚举值)
    
    On Error GoTo CleanUp
    
    ' 性能优化
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
    
    ' 处理插入操作
    If mode <> CopyOnly Then
        ' 插入行
        ws.Rows(insertRow & ":" & insertRow + rowCount - 1).Insert Shift:=xlDown
        
        ' 调整源行号(如果插入行在源行上方)
        If sourceRow >= insertRow Then
            sourceRow = sourceRow + rowCount
        End If
    End If
    
    ' 处理复制操作
    If mode <> InsertOnly Then
        ' 直接复制数据(不经过剪贴板)
        ws.Rows(sourceRow).Copy Destination:=ws.Rows(insertRow & ":" & insertRow + rowCount - 1)
        Application.CutCopyMode = False
        
        ' 强制重算公式
        ws.Calculate
    End If
    
CleanUp:
    ' 恢复设置
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    On Error Resume Next
End Sub
相关推荐
njsgcs1 天前
读取文件夹内的pdf装换成npg给vlm分类人工确认然后填入excel vlmapi速度挺快 qwen3-vl-plus webbrowser.open
分类·pdf·excel
星空的资源小屋1 天前
Tuesday JS,一款可视化小说编辑器
运维·网络·人工智能·编辑器·电脑·excel
sinat_375112261 天前
abap 通用发送邮件程序(获取alv数据,带excel附件)
excel·sap·abap·邮件
忘忧记1 天前
Excel拆分和合并优化版本
windows·microsoft·excel
牵牛老人1 天前
Qt 中如何操作 Excel 表格:主流开源库说明介绍与 QXlsx 库应用全解析
qt·开源·excel
十碗饭吃不饱1 天前
RuoYi/ExcelUtil修改(导入excel表时,表中字段没有映射上数据库表字段)
数据库·windows·excel
林月明2 天前
【VBA】自动设置excel目标列的左邻列格式
开发语言·excel·vba·格式
JavaOpsPro2 天前
审计 jenkins获取构建历史,生成excel
运维·jenkins·excel
CodeCraft Studio2 天前
国产化Excel开发组件Spire.XLS教程:在Python中将Pandas DataFrame导出到Excel的详细教程
python·excel·pandas
电话交换机IPPBX-3CX2 天前
在 MS Excel 和 Google Sheets 中生成 3CX 可视化通话报告
excel·ip pbx·电话交换机·google表格·可视化报表