Excel – VBA问题。 需要从目录中的所有excel文件访问数据而不打开文件

所以我有一个“主”Excel文件,我需要填充从目录中的Excel文件中的数据。 我只需要访问每个文件,并从每个工作簿中的第二个工作表中复制一行,并将其粘贴到我的主文件中,而无需打开Excel文件。

我不是这方面的专家,但我可以处理一些中级macros。 我需要的最重要的事情就是能够一个接一个地访问每个文件而不用打开它们。 我真的需要这个,所以任何帮助表示赞赏! 谢谢!

编辑…

所以我一直试图使用dir函数来循环运行目录,但我不知道如何从第一个文件继续。 我在一个网站上看到了这一点,但对我来说,循环不会停止,只会访问目录中的第一个文件。

Folder = "\\Drcs8570168\shasad\Test" wbname = Dir(Folder & "\" & "*.xls") Do While wbname <> "" i = i + 1 ReDim Preserve wblist(1 To i) wblist(i) = wbname wbname = Dir(FolderName & "\" & "*.xls") 

wbname如何向下移动文件列表?

我只想指出:你不需要严格的VBA来从一个封闭的工作簿中获取值。 您可以使用一个公式,如:

 ='C:\MyPath\[MyBook.xls]Sheet1'!$A$3 

你也可以在VBA中实现这个方法:

 Dim rngDestinationCell As Range Dim rngSourceCell As Range Dim xlsPath As String Dim xlsFilename As String Dim sourceSheetName As String Set rngDestinationCell = Cells(3,1) ' or Range("A3") Set rngSourceCell = Cells(3,1) xlsPath = "C:\MyPath" xlsFilename = "MyBook.xls" sourceSheetName = "Sheet1" rngDestinationCell.Formula = "=" _ & "'" & xlsPath & "\[" & xlsFilename & "]" & sourceSheetName & "'!" _ & rngSourceCell.Address 

其他答案也提供了很好的解决scheme,也许比这更优雅。

您不必打开这些文件(ADO可能是一个选项,就像创build代码链接或者使用ExecuteExcel4Macro一样), 但是通常用代码打开文件是最灵活和最简单的方法。

  1. 从closures的工作簿(ADO)复制一个范围
  2. ExecuteExcel4Macro
  3. 链接方法

但是,为什么你不想打开文件 – 这真的是一个困难的约束?

我在Macro中的代码遍历所有放置在两个命名表单之间的表单,并将它们的数据复制到一个整合文件中,从一个文件夹中的每个工作表中的所有表单中拉出所有数据(通过在后台打开文件)。

如果你对这个过程感到满意的话,可以很容易地将它定制为第2页的X行

brettdjpaulsm4答案提供了很多信息,但我仍然想增加我的2美分

正如iDevlop在此线程中回答的( 通过VBA复制另一个Workbook中的数据 ),也可以使用GetInfoFromClosedFile()

从我的类包装Excel的一些位:

 Dim wb As Excel.Workbook Dim xlApp As Excel.Application Set xlApp = New Excel.Application xlApp.DisplayAlerts = False ''# prevents dialog boxes xlApp.ScreenUpdating = False ''# prevents showing up xlApp.EnableEvents = False ''# prevents all internal events even being fired ''# start your "reading from the files"-loop here Set wb = xlApp.Workbooks.Add(sFilename) '' better than open, because it can read from files that are in use ''# read the cells you need... ''# [....] wb.Close SaveChanges:=False ''# clean up workbook ''# end your "reading from the files"-loop here ''# after your're done with all files, properly clean up: xlApp.Quit Set xlApp = Nothing 

祝你好运!

在你的macros的开始添加

 Application.ScreenUpdating = false 

然后在最后

 Application.ScreenUpdating = True 

当macros执行其function时,不会看到任何文件打开。