将多个Excel文件批量导入某个Excel文件中

本文介绍了一个通过VBA宏实现的需求:选择Excel中特定行或列,根据选定单元格名称创建新工作表,并将指定目录下同名Excel文件内容复制到新工作表中。虽然目前的代码存在效率问题,但可以参考其他优化方法进行改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我老婆提出的一个需求:(1)选中Excel表格中的某些行或列,运行某个Macro,自动根据选中的cells创建新的worksheets,worksheets的名字就是选中的cells的名字。(2)创建新的worksheet的同时,要把某指定目录下与新的worksheet同名的Excel文件的内容copy到新的worksheet中去。

下面是搜索了半天之后搞出来的Macro,没有异常处理,而且使用了copy/paste,文件太多时效率肯定不高。其实完全可以参照

Copy a sheet from each workbook into your workbook in a folder using VBA in Microsoft Excel 和 Optimize Slow VBA Code 中的方法来优化。

Sub LoadSheets()
    Application.ScreenUpdating = False  ' stop screen flickering
    
    ' Create new sheets according to selected cells and copy the
    ' contebts of other files into the new sheets
    Dim YesNo As Variant, myFolder As String, MyLF As String
        
    MyLF = Chr(10) & Chr(13)    ' a line feed command
    myFolder = "D:\Documents and Settings\bonny\My Documents\tools"   'change this to the location of saved XML files
    'Windows 7下C盘默认不可写,请修改DefFolder的值
    
    YesNo = MsgBox("This Macro is going to create new worksheets according to your selected cells." & myclf & _
        "Do you want to continue?", _
        vbYesNo, "Caution")
    Select Case YesNo
    Case vbYes
        myFolder = InputBox("Please enter the folder where all your Excel files locates", Default:=myFolder)
        'Create new worksheets
        For Each cell In Selection.Cells
            Call CreateNewWorksheet(cell.Value, myFolder)
        Next
    Case vbNo
        Exit Sub
    End Select
    
    Application.ScreenUpdating = True
End Sub

Function CreateNewWorksheet(SheetName As String, FolderName As String) As String

    Dim oSheet As Worksheet, vRet As Variant
    Dim fName As String
    
    'creating a new excel worksheet
    Set oSheet = Worksheets.Add
    With oSheet
        .Name = SheetName
        .Move after:=Sheets(Sheets.Count) '在当前所有worksheet后创建新的工作表
        .Activate
    End With
    
    'open Excel files and copy the contents to this sheet
    Dim newWB As Workbook, curWB As Workbook
    Dim startRange As Range
    
    Set curWB = ThisWorkbook ' For WorkBook and Range objects, set is necessary during assignment
    fName = FolderName + "\" + SheetName + ".xls"
    Set newWB = Workbooks.Open(fName)
    newWB.Activate
    newWB.Sheets(1).Activate ' 假定只有第一个worksheet需要copy
    Set startRange = newWB.Sheets(1).UsedRange ' Only used range will be copied
    newWB.Sheets(1).UsedRange.Copy
    
    'select the destination cell
    curWB.Activate
    Sheets(SheetName).Activate
    Range(startRange.Address).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False  'Clear Clipboard
    newWB.Close
    
    Exit Function

End Function



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值