从封闭的Excel工作簿中读取数据

时间:2018-10-29 16:07:25

标签: excel vba

我试图从多个共享的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'!

是否可以在不手动打开文档的情况下读取数据?

3 个答案:

答案 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是处理电子表格而不打开它的唯一方法。

here