我有大约500张时间卡。每个时间卡都是它自己的文件(.xls工作簿)。我需要所有这些工作簿中的单元格K5。这是一次性的事情(每个季度) - 如果这500多张时间卡中的任何一张发生变化,我都不需要更新结果。
如果有一个函数带有两个参数 - 1)包含Excel文件的目录的名称,那将会很棒; 2)您想要的特定单元格。
经过3.5小时的搜索,Excel论坛没有帮助。我必须使用错误的关键字,因为我不相信Excel没有这样的基本功能。 (如果我在同一个工作簿中有多个工作表,我确实找到了一些东西 - 我们无法在同一个文件中保存所有这些时间卡,并且同时打开并打开所有工作簿将非常繁琐 - 500 +双击。)
感谢。
(Windows XP SP3; Microsoft Office Excel 2003)
答案 0 :(得分: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