从不同文件夹中的许多工作簿导入数据

时间:2014-06-14 06:10:03

标签: excel-vba excel-2007 excel-2010 vba excel

我希望将来自许多工作簿的导入/复制数据转换为摘要工作簿。工作簿安排在不同的子文件夹中,即

C:\data1\results_2001.xlm
C:\data2\results_2002.xlm
C:\data3\results_2003.xlm

名称相似但略有不同以区分它们。目前,我单独导入文件,我想自动化该过程。结果文件(上面)是其他excel文件,因此我无法按文件类型定位它们。

如何通过部分文件名导入这些文件?

3 个答案:

答案 0 :(得分:1)

一个选项是为Excel工作表创建一个文件路径数组,然后遍历数组并将所需数据放入摘要表。

Sub CreateSummary()
    Dim wkbs() As Variant, wkb As Integer, owb As Workbook

    wkbs = Array("C:\data1\results_2001.xlm", "C:\data2\results_2002.xlm", "C:\data3\results_2003.xlm")

    For wkb = 0 To UBound(wkbs)             
         Set owb = Application.Workbooks.Open(wkbs(wkb)) //Open each workbook

         With owb
             //Get the data you want into your summary workbook
            .Close
         End With
    Next wkb
End Sub

答案 1 :(得分:0)

你可以用任何语言来做,但对于那些提出这个问题的人来说,我认为这会有点挑战,所以这就是你需要做的事情:

  • 创建一个列出来自给定路径的文件/文件夹的功能
  • 遍历找到的所有项目,如果它是一个文件夹,则递归它
  • 如果项目符合您的目标(名称,扩展名,...),请阅读并将内容加载到摘要中

这样的事情,我相信你可以使用VBA轻松实现这一目标,看看here

从字面上看,它会是这样的,请注意这不是有效的代码,只是我写下来帮助你解决这个问题:

function loopthepath (string pathtoloop)

foreach(dirItem item in pathtoloop.getdirItem)
{
    if (item is folder)
    {
        loopthepath(pathtoloop + item) 
    }
    else 
    {
        if (item fits mydescription)
        {
            load the content to the summary 
        }
    }
}

答案 2 :(得分:0)

另一种方式,特别是如果只进行一次操作:进入Cmd.exe,为你正在寻找的文件做一个Dir,并将其发送到文本文件(例如dir c:\results_*.xlm /s /b > c:\myList.txt之类的东西) 。然后将文本文件导入工作表,逐步遍历列表中的每个单元格,依次打开每个工作簿。