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
相关推荐
hPw0eKIqD13 小时前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel·wps
冰心孤城19 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
金豆呀1 天前
WPS批量提取Word文档内容生成固定格式Excel表格
word·excel·wps
Access开发易登软件1 天前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
红莲凪是2 天前
使用二次封装的Excel COM 组件操作Excel\WPS ET IExcelRange 高级应用
python·excel·wps
用户298698530142 天前
如何使用免费工具在线将 Excel 转换为 XML 格式
人工智能·后端·excel
开开心心就好2 天前
内存清理工具定时自动清理开机自启动
java·开发语言·elasticsearch·ocr·excel·音视频·big data
开开心心就好2 天前
电脑内存优化工具一键释放内存超简单
java·开发语言·macos·arcgis·ocr·excel·音视频
随手工具-Excel, pdf, SQL2 天前
没有 SSMS 导入向导?Excel/CSV 一键生成 SQL Server INSERT 脚本
excel·sql server·在线工具·insert·测试数据·ssms·t-sql
SunnyDays10113 天前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json