Excel VBA - чтение данных из другого ЗАКРЫТОГО листа Excel
Я пытаюсь прочитать данные из нескольких общих документов 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 ответа
Так как вы не хотите открывать файлы вручную, я подозреваю, что вы можете открыть их автоматически. Вот простой пример того, как открывать и закрывать некоторые файлы и выполнять вычисления с использованием VBA. Вы по-прежнему будете технически открывать файлы, но только на короткое время и фактически не отображать их. Для иллюстрации предположим, что у вас есть два файла FileA.xlsm
а также FileB.xlsm
в папке "C:\MyPath\"
со следующими данными в диапазоне от А1 до А3:
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
Вы можете использовать ADO и драйвер ODBC для Excel, чтобы рассматривать закрытые книги как базы данных. Затем вы можете использовать SQL для извлечения данных. Но это предполагает, что вы располагаете информацией в виде таблиц с заголовками таблиц. AFAIK, это единственный способ работать с таблицей, не открывая ее.
Здесь проходит прогулка
Будет ли работать ссылка на закрытые файлы? (В Excel 2016 выберите "Данные"> "Получить данные"> "Из файла"> "Из рабочей книги".) Тогда будет только код VBA. ActiveWorkbook.RefreshAll
,