百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

VBA从多个Excel文件复制数据

liuian 2025-02-06 15:41 23 浏览

需求

如果您有多个Excel文件,并且每个文件都包含一个名为wsData的工作表,您想要从每个文件的wsData工作表中复制数据到同一个wsOutput工作表中,同时保留每个wsData工作表的表头,那么您需要编写一个能够循环遍历文件夹中所有Excel文件,并逐个打开它们以执行复制操作的VBA宏。

以下是一个示例代码,它假设所有的Excel文件都位于一个特定的文件夹中,并且每个文件都有一个名为wsData的工作表。该宏将打开每个文件,复制wsData的表头到wsOutput(如果它是第一个文件,或者如果之前的文件已经复制了表头,则不会重复复制),然后复制数据到wsOutput的下一行。

VBA代码实现

Sub CopyDataFromMultipleFiles()
    Dim folderPath As String
    Dim fileName As String
    Dim wbData As Workbook
    Dim wsData As Worksheet
    Dim wsOutput As Worksheet
    Dim rngHeader As Range
    Dim lastRowOutput As Long
    Dim firstFile As Boolean
      
    ' 设置输出工作簿和输出工作表
    Set wsOutput = ThisWorkbook.Sheets("Output")
      
    ' 清除输出工作表的内容(如果需要)
    wsOutput.Cells.Clear
      
    ' 设置文件夹路径
    folderPath = "F:\practice\vba-demo\data\"
    fileName = Dir(folderPath & "*.xls") ' 假设文件是.xlsx格式
    firstFile = True ' 标记是否为第一个文件,以决定是否复制表头
    
    If fileName = "" Then
        MsgBox "目录:" & folderPath & "下没有找到.xls文件"
        End
    End If
    
      
    ' 循环遍历文件夹中的每个文件
    Do While fileName <> ""
        ' 构建完整的文件路径
        Dim fullFilePath As String
        fullFilePath = folderPath & fileName
          
        ' 打开工作簿
        Set wbData = Workbooks.Open(fullFilePath)
          
        ' 设置wsData工作表
        Set wsData = wbData.Sheets("wsData")
          
        ' 检查是否找到了wsData工作表
        If Not wsData Is Nothing Then
            ' 复制表头到输出工作表(仅当处理第一个文件时)
            If firstFile Then
                Set rngHeader = wsData.Range("A1").CurrentRegion.Rows(1) ' 假设表头在第一行
                rngHeader.Copy Destination:=wsOutput.Range("A1")
                firstFile = False ' 标记已经复制过表头
            End If
              
            ' 找到输出工作表的最后一行
            lastRowOutput = wsOutput.Cells(wsOutput.Rows.Count, "A").End(xlUp).Row + 1
              
            ' 复制数据到输出工作表
            wsData.Range("A2").CurrentRegion.Offset(1, 0).Copy Destination:=wsOutput.Cells(lastRowOutput, 1)
        Else
            MsgBox "在文件 '" & fullFilePath & "' 中未找到名为 'wsData' 的工作表。"
        End If
          
        ' 关闭工作簿,不保存更改
        wbData.Close SaveChanges:=False
          
        ' 获取下一个文件名
        fileName = Dir()
    Loop
      
    ' 提示操作完成
    MsgBox "数据已从多个文件中复制到输出工作表。"
End Sub

在这个宏中,我们首先设置了输出工作簿和输出工作表,并清除了输出工作表的内容(如果需要的话)。然后,我们定义了文件夹路径,并使用Dir函数遍历该文件夹中的所有Excel文件。对于每个文件,我们打开它,检查是否存在名为wsData的工作表,并复制表头和数据到输出工作表。在复制数据之前,我们找到输出工作表的最后一行,以便将数据放在正确的位置。最后,我们关闭工作簿并不保存更改,然后继续处理下一个文件,直到遍历完所有文件。

请注意,这个宏假设所有wsData工作表的表头都在第一行,并且数据区域紧接着表头。如果您的实际情况有所不同,您可能需要调整rngHeader和复制数据范围的代码以适应您的具体情况。此外,确保将文件夹路径更改为包含您Excel文件的实际文件夹路径。

相关推荐

Springboot 整合 Websocket 轻松实现IM及时通讯

一、方案实践集成分为三步:添加依赖、增加配置类和消息核心类、前端集成。1.1、添加依赖<dependency><groupId>org.springframework...

SpringBoot扩展——应用Web Socket!

应用WebSocket目前,网络上的即时通信App有很多,如QQ、微信和飞书等,按照以往的技术来说,即时功能通常会采用服务器轮询和Comet技术来解决。HTTP是非持久化、单向的网络协议,在建立连接...

【Spring Boot】WebSocket 的 6 种集成方式

介绍由于前段时间我实现了一个库【SpringCloud】一个配置注解实现WebSocket集群方案以至于我对WebSocket的各种集成方式做了一些研究目前我所了解到的就是下面这些了(就一个破w...

SpringBoot生产级WebSocket集群实践,支持10万连接!

1、问题背景智慧门诊系统旨在从一定程度上解决患者面临的三长一短(挂号、看病、取药时间长,医生问诊时间短)的问题。实现“诊前、诊中、诊后”实时智能一体化,整合完善医院工作流程。围绕门诊看病的各个环节,让...

Spring Boot3 中 WebSocket 实现数据实时通信全解析

各位互联网大厂的开发同仁们,在如今的互联网应用开发中,实时通信功能越来越重要。比如在线聊天、数据推送、实时通知等场景,都离不开高效的实时通信技术。而WebSocket作为一种高效的双向通信协议,在...

Java WebSocket 示例(java nio websocket)

一、环境准备1.依赖配置(Maven)在pom.xml中添加WebSocket依赖:xml<!--SpringBootWebSocket--><dependen...

Spring Boot整合WebSocket:开启实时通信之旅

SpringBoot整合WebSocket:开启实时通信之旅今天咱们来聊聊SpringBoot整合WebSocket这件大事儿。说到实时通信,你是不是第一时间想到QQ、微信这些聊天工具?没错,We...

Spring Boot3 竟能如此轻松整合 WebSocket 技术,你还不知道?

在当今互联网大厂的软件开发领域,实时通信的需求愈发迫切。无论是在线聊天应用、实时数据更新,还是协同办公系统,都离不开高效的实时通信技术支持。而WebSocket作为一种能够实现浏览器与服务器之间持...

Spring Boot集成WebSocket(springboot集成websocket)

一、基础配置依赖引入<dependency><groupId>org.springframework.boot</groupId><artifactId>...

Springboot下的WebSocket开发(springboot websocket server)

今天遇到一个需求,需要对接第三方扫码跳转。一种方案是前端页面轮询后端服务,但是这种空轮询会虚耗资源,实时性比较差而且也不优雅。所以决定使用另一种方案,websocket。以前就知道websocket,...

springboot websocket开发(java spring boot websocket)

maven依赖SpringBoot2.0对WebSocket的支持简直太棒了,直接就有包可以引入<dependency><groupId>org....

Python界面(GUI)编程PyQt5窗体小部件

一、简介在Qt(和大多数用户界面)中,“小部件”是用户可以与之交互的UI组件的名称。用户界面由布置在窗口内的多个小部件组成。Qt带有大量可用的小部件,也允许您创建自己的自定义和自定义小部件。二、小部件...

实战PyQt5: 014-下拉列表框控件QComboBox

QComboBox简介QComboBox下拉列表框,是一个集按钮和下拉列表选项于一体的部件。QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间。QComboBox中的常用方法...

Python小白逆袭!7天吃透PyQt6,独立开发超酷桌面应用

PythonGUI编程:PyQt6从入门到实战的全面指南在Python的庞大生态系统中,PyQt6作为一款强大的GUI(GraphicalUserInterface,图形用户界面)编程框架,为开...

如何用 PyQt6 打造一个功能完善的 SQLite 数据库管理工具

如何使用PyQt6和qt_material库,打造一个功能完善的SQLite数据库管理工具,轻松管理和查询SQLite数据库。一、目标数据库连接与表管理:支持连接SQLite数据库...