2011-07-04 83 views
2

我有大约500个时间卡。每个时间卡都是自己的文件(.xls工作簿)。我需要所有这些工作簿中的单元格K5。这是一次性的事情(每个季度) - 如果500+个时间卡中的任何一个发生变化,我不需要更新结果。在数百个Excel工作簿中汇总同一单元格

如果有一个函数需要两个参数 - 1)包含Excel文件的目录的名称; 2)你想要的特定单元格总计。

经过3.5小时的搜索,Excel论坛并没有帮助。我必须使用错误的关键字,因为我不能相信Excel没有这样的基本功能。 (如果我在同一个工作簿中有多个工作表,我确实发现了一些东西 - 我们无法将所有这些时间卡都保存在同一个文件中,并且同时打开并打开所有工作簿会非常繁琐 - +双击)

谢谢。

(的Windows XP SP3,微软Office Excel 2003中)

回答

1

这是一些代码,会提示输入一个文件夹被选中,然后循环该文件夹的工作表名称中的所有文件[Worksheetname =“工作表Sheet1”][CELL =“K5”]并将单元格K5中的总数相加。

希望这会让你开始。您需要确保所有文件都具有有效的“工作表名称”或插入测试。

Option Explicit 

Private Sub ReadFilesinFolder() 
'**Opens File Dialog and cycles all files for batch or just single file 
Dim objFs As Object, objF As Object, objF1 As Object, objFc As Object 
Dim strEndofPath As String, strFilePath As String, strFilename As String 
Dim lngCount As Long, Worksheetname As String, CELL As String, objWB As Workbook, objWS As Worksheet 
Dim dblTOTAL As Double 

Worksheetname = "Sheet1" 
CELL = "K5" 


With Application.FileDialog(msoFileDialogOpen) 
    .AllowMultiSelect = False 
    .Show 

    If .SelectedItems.Count = 0 Then 
     End 
    End If 

    For lngCount = 1 To .SelectedItems.Count 
     strEndofPath = InStrRev(.SelectedItems(lngCount), "\") 
     strFilePath = Left(.SelectedItems(lngCount), strEndofPath) 
     strFilename = Right(.SelectedItems(lngCount), Len(.SelectedItems(lngCount)) - strEndofPath) 
    Next lngCount 
End With 

Set objFs = CreateObject("Scripting.FileSystemObject") 
Set objF = objFs.GetFolder(strFilePath) 

    'Batch Import 
    Set objFc = objF.Files 
    For Each objF1 In objFc 
    DoEvents 

     Set objWB = GetObject(objF1) 
     Set objWS = objWB.Sheets(Worksheetname) 
     dblTOTAL = dblTOTAL + objWS.Range(CELL).Value 

     objWB.Close 
     Set objWB = Nothing 

    Next objF1 
msgbox dblTOTAL 
End Sub 
+0

文件对话框不让我选择一个目录,它不会让我选择多个文件。当我选择一个单独的.xls文件时,我在这一行上得到了一个运行时错误“类型不匹配”Set objWB = GetObject(objF1)“我还没有添加子程序。在Visual Basic编辑器中,我添加了子例程,然后运行 ​​- >运行子/用户窗体(我按照我在这里找到的说明添加/运行子例程:http://www.ehow.com/how_6186281_use-subroutine-excel- visual-basic.html) – VincentRogers

+0

我不知道什么“或插入一个测试”的含义在您的指示。 .xls文件只有在创建文件时自动执行该操作时才具有“有效的”Worksheetname“”。谢谢。 – VincentRogers

+0

再试一次代码,完成后我忘记关闭每个工作簿。该代码假定所有数据都在名为“Sheet1”的工作表上。将'Sheet1'更改为您需要的值,或者如果工作表名称不一致,则需要添加更多逻辑以确定来自K5的数据所在的工作表名称。 – osknows

相关问题