我试图从多个共享的Excel文档中读取数据而不打开它们。除了我写的文件,它们都在同一网络目录中。
这是我提取的数据的示例:
=SUMPRODUCT(COUNTIFS('[Tracker_v1.2.xlsm]Work Log'!$D:$D,B5,'[Tracker_v1.2.xlsm]Work Log'!$J:$J,{"XXXX","YYYY"}))
=SUMPRODUCT(COUNTIFS('[B Tracker_v1.1.xlsm]Work Log'!$D:$D,B6,'[B Tracker_v1.1.xlsm]Work Log'!$J:$J,{"XXXX","YYYY"})+COUNTIFS('[A Tracker_v1.1.xlsm]Work Log'!$D:$D,B6,'[A Tracker_v1.1.xlsm]Work Log'!$J:$J,{"XXXX","YYYY"}))
我尝试使用文件路径'\\network path\[A Tracker_v1.1.xlsm]Work Log'!
是否可以在不手动打开文档的情况下读取数据?
答案 0 :(得分:2)
由于您不想手动打开文件 ,我怀疑您可能会接受自动打开文件。这是一个有关如何使用VBA打开和关闭某些文件以及执行计算的简单示例。从技术上讲,您仍然会打开文件,但只是一小会儿,而无需实际显示它们。为了说明起见,假设您在文件夹FileA.xlsm
中有两个文件FileB.xlsm
和"C:\MyPath\"
,其范围在A1到A3之间的数据如下:
FileA FileB
1 4444
22 55555
333 666666
以下代码将在立即窗口中打印每一列的总和。
Sub OpenClosedFiles()
' Opens some files, does some calculations and then closes those files.
Application.ScreenUpdating = False ' Hide the files during the microseconds while they're open.
' Define the path:
Const sPath As String = "C:\MyPath\" ' <--- Replace; don't forget the last backslash.
Dim rngA, rngB As Range
Dim sFileA, sFileB As String
Dim wbA, wbB As Workbook
sFileA = "FileA.xlsm"
sFileB = "FileB.xlsm"
Set wbA = Workbooks.Open(sPath & sFileA)
Set wbB = Workbooks.Open(sPath & sFileB)
Set rngA = wbA.Worksheets(1).Range("A1:A3")
Set rngB = wbB.Worksheets(1).Range("A1:A3")
' Do calculations on the ranges here, for example:
Debug.Print "Sum of FileA: " & Application.WorksheetFunction.Sum(rngA)
Debug.Print "Sum of FileB: " & Application.WorksheetFunction.Sum(rngB)
wbA.Close
wbB.Close
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
链接到关闭的文件是否可行? (在Excel 2016中,单击“数据”>“获取数据”>“从文件”>“从工作簿”。)然后,VBA代码将仅为TypeError
。
答案 2 :(得分:0)
您可以使用ADO和Excel ODBC驱动程序将关闭的工作簿视为数据库。然后,您可以使用SQL检索数据。但是它假定您具有在表标题中列出的信息。 AFAIK是处理电子表格而不打开它的唯一方法。