当前位置: 首页 > article >正文

VBA实现遍历Excel文件将指定的单元格内容拷贝到当前工作簿

选择一个文件夹,遍历其中所有Excel文件,并将每个文件指定的单元格内容拷贝到当前工作簿的目标区域。

Sub 遍历文件拷贝指定区域内容()


    Dim folderPath As String
    Dim fileName As String
    Dim sourceColumns As String
    Dim targetRow As Long
    Dim wbSource As Workbook
    Dim wsTarget As Worksheet
    Dim wsSource As Worksheet
    Dim lastRow As Long
    Dim maxLastRow As Long
    Dim sourceRange As Range
    Dim col As Long
    Dim colStart As Long
    Dim colEnd As Long
    
    ' 初始化变量
    targetRow = 1 ' 起始行
    Set wsTarget = ThisWorkbook.Sheets(1) ' 当前工作簿的第一个工作表
    
    ' 输入要拷贝的列范围
    sourceColumns = Application.InputBox("请输入要拷贝的列范围(例如 A:D):", "指定拷贝列范围", Type:=2)
    If sourceColumns = "" Then
        MsgBox "未输入有效范围", vbExclamation
        Exit Sub
    End If
    
    ' 选择文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "选择包含Excel文件的文件夹"
        If .Show = -1 Then
            folderPath = .SelectedItems(1) & "\"
        Else
            MsgBox "未选择文件夹", vbExclamation
            Exit Sub
        End If
    End With
    
    ' 遍历文件夹中的所有Excel文件
    fileName = Dir(folderPath & "*.xls*") ' 支持xls和xlsx格式
    Do While fileName <> ""
        ' 打开每个Excel文件
        On Error Resume Next
        Set wbSource = Workbooks.Open(folderPath & fileName, ReadOnly:=True)
        If Not wbSource Is Nothing Then
            On Error GoTo 0
            Set wsSource = wbSource.Sheets(1) ' 默认取第一个工作表
            
            ' 找到指定列范围的最后一行(所有列中最大的行号)
            colStart = Columns(Split(sourceColumns, ":")(0)).Column
            colEnd = Columns(Split(sourceColumns, ":")(1)).Column
            maxLastRow = 0
            
            For col = colStart To colEnd
                lastRow = wsSource.Cells(wsSource.Rows.Count, col).End(xlUp).Row
                If lastRow > maxLastRow Then
                    maxLastRow = lastRow
                End If
            Next col
            
            If maxLastRow >= 1 Then
                ' 构建有效的范围
                Set sourceRange = wsSource.Range(wsSource.Cells(1, colStart), wsSource.Cells(maxLastRow, colEnd))
                
                ' 拷贝指定范围内容到目标单元格
                sourceRange.Copy
                wsTarget.Cells(targetRow, 1).PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False ' 取消选中状态
                
                ' 更新目标行
                targetRow = targetRow + maxLastRow
            Else
                MsgBox "文件:" & fileName & " 中未找到内容", vbExclamation
            End If
            
            wbSource.Close SaveChanges:=False
        Else
            MsgBox "无法打开文件: " & fileName, vbExclamation
        End If
        fileName = Dir ' 下一个文件
    Loop
    
    MsgBox "数据导入完成", vbInformation
End Sub


http://www.kler.cn/a/451943.html

相关文章:

  • 网络安全加密
  • 傅里叶变换原理
  • 三维动画的常用“视觉特效”有哪些?
  • 【ES6复习笔记】Symbol 类型及其应用(9)
  • 追风赶月莫停留,平芜尽处是春山—记一次备考经历(下)
  • 从数据仓库到数据中台再到数据飞轮:电信行业的数据技术进化史
  • whisper.cpp: PC端测试 -- 电脑端部署音频大模型
  • 图像处理-Ch6-彩色图像处理
  • 修改输出资源的名称和路径、自动清空上次打包资源
  • 【C 语言】内存节省机制
  • 深入理解.NET内存回收机制
  • 【论文复现】进行不同视角图像的拼接
  • python如何求欧几里得
  • VMware虚拟机中CentOS系统/dev/mapper/centos-home分区扩容指南
  • 稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
  • 2024年12月25日Github流行趋势
  • 【卷积神经网络】常用评价指标总结
  • 使用 C# 代码计算数学表达式
  • 代码随想录算法日记day16 | 513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树
  • xilinx 芯片使用vivado导出pindelay文件——FPGA学习笔记24
  • 【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
  • 《系统动力学模型构建与Vensim仿真》01系统动力学概述与行为模式
  • 基于Spring Boot的高校请假管理系统
  • VS2022 无法使用GitHub账户登录/无法使用copilot 解决方案
  • 设计模式之外观模式:从电脑组装到系统架构的简化之道
  • 软考:系统架构设计师教材笔记(持续更新中)