你的问题有点不清楚(这就是为什么每个人都给你Dir()
解决方案)。
我认为您是说您的工作表中已经有了路径和文件名列表,并且您只想使用这些文件中的某个单元格值填充工作表的每一行。有多种方法可以做到这一点,而无需每次实际打开工作簿(例如使用单元格公式,使用ADO
, ExecuteExcel4Macro()
)。其中任何一个都会对你很有帮助。
我个人偏好“生”ADO
因为我可以更好地控制错误处理并检查表名称、工作表名称等。下面的代码显示了如何ExecuteExcel4Macro()
可以工作(它的语法更简单,可能更适合您)。您必须将第一行代码中的工作表名称更改为工作表名称以及第二行文件名第一个单元格的范围地址。
Dim startCell As Range, fileRng As Range
Dim files As Variant, values() As Variant
Dim path As String, file As String, arg As String
Dim r As Long, i As Long
'Acquire the names of your files
With ThisWorkbook.Worksheets("Sheet1") 'amend to your sheet name
Set startCell = .Range("F11") 'amend to start cell of file names
Set fileRng = .Range(startCell, .Cells(.Rows.Count, startCell.Column).End(xlUp))
End With
files = fileRng.Value2
'Size your output array
ReDim values(1 To UBound(files, 1), 1 To 1)
'Populate output array with values from workbooks
For r = 1 To UBound(files, 1)
'Create argument to read workbook value
i = InStrRev(files(r, 1), "\")
path = Left(files(r, 1), i)
file = Right(files(r, 1), Len(files(r, 1)) - i)
arg = "'" & path & "[" & file & "]Sheet1'!R15C3"
'Acquire the value
values(r, 1) = ExecuteExcel4Macro(arg)
Next
'Write values to sheet
fileRng.Offset(, 1).Value = values