Получение данных из закрытой книги Excel

Функция GetValue предназначена для получения данных из закрытой книги Excel

Использовать такой способ имеет смысл только в том случае, если из большого файла надо получить значения только нескольких ячеек (или одного диапазона ячеек), и при этом точно известно расположение на листе интересующих нас ячеек, и имена листов

Пример использования функции:

Sub ПримерИспользования_GetValue()
    p = "C:\Documents and Settings\Бухгалтерия" ' папка с файлом
    f = "расход.xls" ' имя файла
    s = "доходы" ' название листа
    a = "D145" ' интересующая нас ячейка
    
    ' выполняем загрузку данных из закрытой книги Excel
    ЗначениеЯчейки = GetValue(p, f, s, a)
 
    Debug.Print ЗначениеЯчейки ' выводим результат в окно Immediate
End Sub

Посмотрите также результат использования этой функции внутри цикла
для получения значений ячеек из списка найденных файлов

Код функции GetValue:

Function GetValue(path, file, sheet, ref)
    'Функция GetValue получает в качестве параметров:
    ' path – путь к закрытому файлу (например, "d:\files");
    ' file – название рабочей книги (например, "budget.xls");
    ' sheet – название рабочего листа (например, "Лист1");
    ' ref – ссылка на ячейку (например, "C4").
    
    If Right(path, 1) <> "\" Then path = path & "\"
 
    ' проверяем наличие файла по заданному пути
    If Dir(path & file) = "" Then GetValue = "Файл не найден": Exit Function
 
    ' формируем строку запроса
    arg$ = "'" & path & "[" & file & "]" & sheet & "'!" & _
           Range(ref).Range("A1").Address(, , xlR1C1)
 
    ' считываем значение из закрытой книги
    GetValue = ExecuteExcel4Macro(arg$)
 
    ' вместо ошибки возвращаем сообщение об ошибке
    ' к примеру, если лист не найден, или указана несуществующая ячейка
    If IsError(GetValue) Then GetValue = "<ошибка>"
End Function

Ещё один вариант этой функции:

Function GetValue(ByVal filepath$, ByVal SheetName$, ByVal CellAddress$)
    'Функция GetValue получает в качестве параметров:
    ' filepath$ = полный путь к файлу Excel (например, "d:\files\budget.xls");
    ' SheetName$ – название рабочего листа (например, "Лист1");
    ' CellAddress$ – ссылка на ячейку (например, "C4").
    
    On Error Resume Next
    ' проверяем наличие файла по заданному пути
    If Dir(filepath$) = "" Then GetValue = "Файл не найден": Exit Function
 
    Dim arr
    arr = Split(filepath$, "\")
    arr(UBound(arr)) = "[" & arr(UBound(arr)) & "]"
    filepath$ = Join(arr, "\")
 
    ' формируем строку запроса
    arg$ = "'" & filepath$ & SheetName$ & "'!" & Range(CellAddress$).Range("A1").Address(, , xlR1C1)
 
    ' считываем значение из закрытой книги
    GetValue = ExecuteExcel4Macro(arg$)
 
    ' вместо ошибки возвращаем сообщение об ошибке
    ' к примеру, если лист не найден, или указана несуществующая ячейка
    If IsError(GetValue) Then GetValue = "<ошибка>"
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Доброго времени суток. Пытаюсь "скрестить" FilenamesCollection.xls с функцией GetValue
Указываю путь к папке (С1) наименование файла В19 наименование листа в файле Sheet1 и ячейку данные с которой пытаюсь вытянуть С15 - выкидывает ошибку ЗНАЧ... Поскажите где моя ошибка?
в ДНК? )))

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
          _   _  __     __   __   ____          
_ __ | | | | \ \ / / / _| | _ \ __ _
| '_ \ | | | | \ \ / / | |_ | |_) | / _` |
| |_) | | |_| | \ V / | _| | _ < | (_| |
| .__/ \___/ \_/ |_| |_| \_\ \__, |
|_| |_|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.