Excel将许多excel文件数据汇总到一个报告中

时间:2010-10-07 20:43:48

标签: excel vba excel-vba

我有很多excel文件包含填充的内容,现在我想 有一个主文档,其中包含每个文档的摘要结果。

因此我成像为每个文件输入一行:   姓名 - 地址 - 一些数据......

我想打开每个文件,并将所选单元格中的数据复制到我的主文件中。

我已经发现我可以创建Excel的隐形实例,因此它不会 向用户显示。

如何将数据从A1复制/粘贴到我的工作表中?

Sub Combine()
  Fpath = "c:\test\" 
  Fname = Dir(Fpath & "*.xls")
  Dim xl As Excel.Application
  Set xl = CreateObject("Excel.Application")
  xl.Visible = false
  Dim w As Workbook
  Dim remoteBook As Workbook
  Set remoteBook = xl.Workbooks.Open(Fpath & Fname)
  xl.Quit
 End Sub

我是VBA的新手,访问方式似乎相当复杂,有更简单的方法 从这些excel文件中获取值?我真的希望有一个简单的解决方案。

更令人烦恼的是调查文件中的VBA宏可以在开放时禁用它们 所以没有提示用户?

谢谢!

2 个答案:

答案 0 :(得分:2)

这些问题至少有4个问题,让我们看看我们能做些什么: - )

首先,不需要创建另一个Excel实例,只需将代码添加到空白工作簿中(或者将其添加到主文档中,如果可以的话)

 Public Function OpenWorkbook(mypath As String) As Workbook
     Workbooks.Open Filename:=mypath
     Set OpenWorkbook = ActiveWorkbook
 End Function

用法:

 Dim wb as workbook, ws as worksheet
 set wb = OpenWorkbook("your path")
 set ws = wb.Sheets(1)

避免第二个Excel实例自动解决调查文档中任何VBA宏的问题 - 当您从正在运行的宏中打开另一个工作簿时,用户将不会收到任何安全警告。 (顺便说一句,调查文件是否必须包含任何宏?)

将该工作表中的数据复制到工作簿中,如下所示:

 ThisWorkbook.Sheets("Name of your sheet").Range("A1") = ws.Range("A1")

描述了对文件夹中的一堆Excel文件的迭代,例如,here

希望有所帮助。

答案 1 :(得分:0)

你走在正确的轨道上。这并不困难,我认为没有更简单的方法从另一个工作簿获取数据。编写一个函数,您可以轻松地重用代码。

如果仅需要编译调查数据的宏,则可以从填写的xls文件中删除宏。否则,您需要修改每台计算机上的安全权限或对项目进行数字签名。