Страницы: 1
RSS
Адрес файла в формулу, получить данные из ячейки с указанного листа
 
Уважаемые форумчане. Столкнулся с, на первый взгляд, очень простой задачей. В столбце имею адреса файлов (однотипных), находящихся в папке. Задача - напротив адреса файла получить данные из ячейки этого файла.
РАСЧЕТ Иванов.xlsxF:\20141118\КАМЕНЬ\Расчеты сводка\РАСЧЕТ   Иванов.xlsxКварц
РАСЧЕТ Сидоров.xlsxF:\20141118\КАМЕНЬ\Расчеты сводка\РАСЧЕТ Сидоров.xlsxАкрил
РАСЧЕТ Федоров.xlsxF:\20141118\КАМЕНЬ\Расчеты сводка\РАСЧЕТ Федоров.xlsxКерамика
='[ПСТР(C4;1;100)]Расчет столешницы'!$E$11) при использовании данной формулы, так же как и при использовании такой ='[ПСТР()]Расчет столешницы'!$E$11), заставляет выбирать файл вручную.

Подскажите, как сделать, чтобы адрес файла "брался" автоматически из указанной ячейки, и формулу возможно было бы "протянуть" вниз, по списку файлов.
Заранее благодарен, Кирилл.
 
 
Если файлы закрыты, то только так: Как получить данные из закрытой книги?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Странно, если формула в ячейке введена следующим образом: ='F:\20141118\КАМЕНЬ\Расчеты сводка\[РАСЧЕТ Иванов.xlsx]Расчет столешницы'!$E$11 , то при открытии файла данные изменяются, не смотря на то, что файл источник закрыт. Эксель спрашивает "Обновить данные" и все обновляет.

Неужели в такой сложной программе нет простого решения, чтобы путь  'F:\20141118\КАМЕНЬ\Расчеты сводка\[РАСЧЕТ Иванов.xlsx взять из ячейки?
Ведь этот путь в виде текста в ячейке есть!!!
 
Код
[/CODE]Не подскажете, для новичка в VBA, куда вставлять в код VBA адреса ячеек, содержащих данные? И как получить в каждой ячейке данные из закрытого файла, адрес которого прописан в строке таблицы? какую "формулу" ввести в эту ячейку?
 Код хочу использовать этот.
[CODE]Sub Get_Value_From_Close_Book_Excel4Macro()    Dim sPath As String, sFile As String, sShName As String
    Dim sAddress As String, vData
    sPath = "C:\Documents and Settings\" '"
    sFile = "Книга1.xls" '"
    sShName = "Лист1" '"
 
    sAddress = "'" & sPath & "[" & sFile & "]" & sShName & "'!" & Range("A1").Address(ReferenceStyle:=xlR1C1) '"
    vData = ExecuteExcel4Macro(sAddress)
End Sub
в "макрос" его вставил и сохранил, но понимаю, что надо что-то изменить, но не понимаю как ;(
При выполнении в таком виде, ничего не происходит, Заменил  "C:\Documents and Settings\" '", "Книга1.xls" '", "Лист1" '" на свои данные (прописал путь и имена, результат тот же. Что то выполняет, но что, и куда "кладет" результат?
Изменено: kirillk77 - 01.03.2017 12:36:58
 
kirillk77, код следует оформлять соответствующим тегом. Ищите такую кнопку и исправьте своё сообщение.
 
Цитата
kirillk77 написал:
какую "формулу" ввести в эту ячейку?
Вы для начала пример файла приложите, чтобы понять что у Вас вообще в ячейках и что откуда брать. Сейчас нечего подсказывать, т.к. фиг понятно где чего и откуда...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
сообщение удалено
Изменено: планер - 28.02.2017 16:12:27
 
Цитата
kirillk77 написал:
Неужели в такой сложной программе нет простого решения, чтобы путь  'F:\20141118\КАМЕНЬ\Расчеты сводка\[РАСЧЕТ Иванов.xlsx взять из ячейки?
Вот такой вариант: =ДВССЫЛ("'"&B2&"["&A2&"]"&C2&"'!E11") - для получения информации из ячейки E11 листа "Расчет столешницы", к примеру.
 
Цитата
Wanschh написал: Вот такой вариант: =ДВССЫЛ
Вас не смущает, что ДВССЫЛ требует, чтобы файл был открыт? Как отработает Ваша формула с закрытым файлом?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Подключение к нужному файлу можно сделать с помощью "Данные" -> "Подключения" -> "Добавить" . В дальнейшем -  "Обновить". Это если без макросов.
 
Цитата
The_Prist написал: Вы для начала пример файла приложите
Файл макрос при выполнении макроса заполняет строки названиями файлов из указанной папки. Файлы "Расчет..." однотипные. Надо получить напротив имени файла данные со страницы "Расчет столешницы" из определенных ячеек (всегда одних и тех же).  
Изменено: kirillk77 - 01.03.2017 13:10:15
 
Цитата
Wanschh написал:
Вот такой вариант: =ДВССЫЛ("'"&B2&"["&A2&"]"&C2&"'!E11") - для получения информации из ячейки E11 листа "Расчет столешницы", к примеру.
Спасибо. Работает, но, действительно, только при открытом файле источнике. Если делать подключение по каждому файлу вручную, да еще и с выбором листа, то теряется смысл. Файлов много, и тогда проще напрямую ='[РАСЧЕТ Иванов1.xlsx]Расчет столешницы'!$B$11 - так он и с закрытого файла читает.
 
Вот надо же было так извратить код из статьи...
Что это?
Код
sPath = "Address(ReferenceStyle:=xlR1C1)" '"

как оно должно работать вообще? С чего взяли, что это должно так выглядеть?
При этом в статье есть и функции пользователя, в которых можно задать параметры из ячеек и даже синтаксис приведен с описанием аргументов. Есть там такая:
Код
Function Get_Value_From_Close_Book(sWb As String, sShName As String, sAddress As String)
    Dim vData, objCloseBook As Object
    Set objCloseBook = GetObject(sWb)
    'получаем значение
    vData = objCloseBook.Sheets(sShName).Range(sAddress).Value
    objCloseBook.Close False
    'Возвращаем данные в ячейку с функцией
    Get_Value_From_Close_Book = vData
End Function

Все, что остается Вам - первым аргументом дать ссылку из столбца В, статично указать имя листа и адрес ячейки:
=Get_Value_From_Close_Book(B2;"Расчет столешницы";"B11")
Вы почему-то взяли первый код и начали страдать фигней...Это всегда происходит исключительно из-за нежелания читать статьи полностью.
Есть и более оптимальная функция, через ADO. Обе прописал в Вашем файле. Ячейка на втором листе, выделены голубым.

При этом у Вас примеры неверные, т.к. в Е11 в файле Иванова нет вообще никаких данных в листе Расчет столешницы. Поэтому у меня там В11.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо большое. Разберусь только завтра (далеко от компа).
 
Цитата
The_Prist написал:
Есть и более оптимальная функция, через ADO. Обе прописал в Вашем файле. Ячейка на втором листе, выделены голубым
Уважаемый The_Prist, все работает!!! Спасибо огромное!!! ADO действительно лучше и быстрее. Я так понимаю Вы как то создали новую функцию в Эксель! Круто! Один небольшой минус, нельзя указать на ячейку, а только диапазон, но это особенность (я прочитал до конца :)). Еще раз спасибо.  
Изменено: kirillk77 - 01.03.2017 20:45:54
Страницы: 1
Наверх