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

时间:2011-09-23 03:56:42

标签: database excel vba file

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

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

编辑...

所以我一直在尝试使用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如何向下移动文件列表?

5 个答案:

答案 0 :(得分:4)

必须打开文件(ADO可能是一个选项,如创建带代码的链接,或使用ExecuteExcel4Macro)通常打开包含代码的文件是最灵活,最简单的方法。

  1. Copy a range from a closed workbook (ADO)
  2. ExecuteExcel4Macro
  3. Links method
  4. 但是你为什么不打开这些文件 - 这真的是一个严格的约束吗?

    Macro to loop through all sheets that are placed between two named sheets and copy their data to a consolidated file中的代码将文件夹中每个工作簿中的所有工作表中的所有数据拉到一起(通过在后台打开文件)。

    如果您对此过程感到满意,可以轻松地定制到第2页的第X行

答案 1 :(得分:2)

我只想指出:您并不需要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

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

答案 2 :(得分:0)

brettdj paulsm4 答案提供了大量信息,但我仍想添加我的2美分

iDevlop 在此主题(Copy data from another Workbook through VBA)中回答时,您也可以使用GetInfoFromClosedFile()

答案 3 :(得分:0)

Excel的class-wrapper中的一些位:

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
祝你好运!

答案 4 :(得分:-1)

在宏开始时添加

Application.ScreenUpdating = false

然后在最后

Application.ScreenUpdating = True

并且当宏执行其功能时,您将看不到任何文件打开。