Ссылка на закрытый файл excel

 

woodbox

Пользователь

Сообщений: 11
Регистрация: 08.02.2013

Товарищи, есть вопросик.
Каким образом сделать работающую ссылку на ячейку в книге которая закрыта?
Ссылка формируется через ДВССЫЛ(СЦЕПИТЬ(…
Спасибо заранее!

Прикрепленные файлы

  • Пример.xls (14.5 КБ)

Изменено: woodbox13.02.2013 19:22:09

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Через ДВССЫЛ никак.
Делайте ссылку обычными ссылками. Либо через VBA. Иначе никак.

Как получить данные из закрытой книги?

в конце статьи есть функция для получения данных из закрытой книги.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Nic70y

Пользователь

Сообщений: 3289
Регистрация: 22.12.2012

Win7 MSO 2013

:D

 

woodbox

Пользователь

Сообщений: 11
Регистрация: 08.02.2013

Огромное спасибо, но есть один момент) данные появляются только в 1-й ячейке диапазона.
Если в каждую ячейку зайти и нажать Enter то данные появляются.
Посему вопрос, как отправить Enter сразу диапазону ячеек?

 

woodbox

Пользователь

Сообщений: 11
Регистрация: 08.02.2013

#5

14.02.2013 17:25:10

Нашел пользовательскую функцию типа

Код
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
    'Возвращаем данные в ячейку с функцией
    If IsArray(vData) Then
        Get_Value_From_Close_Book = vData
    Else
        Get_Value_From_Close_Book = vData
    End If
End F unction

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

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

«Нашел» сильно сказано. Скорее сходили по моей ссылке и оттуда взяли, т.к. в своем сообщении я точную карту обрисовал, как найти.
Исправить никак нельзя. Либо Вы получаете данные из закрытой книги, либо ничего у Вас не тормозит. Одно из двух.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

woodbox

Пользователь

Сообщений: 11
Регистрация: 08.02.2013

Дело не в том что тормозит) а в том что режим выделения становится каким то другим, т.е. ячейку нельзя выделить как обычно. Функция отрабатывает очень быстро, спасибо Вам за наводку на нее) но тут думаю дело может быть в чем то другом, может excel не возвращается в привычный режим после отработки функции. Не могу понять в чем дело

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

подскажите пожалуйста почему указанная выше пользовательская функция скрыто открывает книгу с данными, но не закрывает её потом?

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

удалил сообщение

Изменено: ikki03.08.2014 07:26:13

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

У меня задача схожая с задачей

woodbox

-а. А именно

функцией листа

получать значение конкретной ячейки из закрытой книги. Должна быть возможность автоматически, по условию изменять путь к файлу. Изучив вышенаписанное удалось получить функцию, которая возвращает путь к ячейке. Возможно ли преобразовать полученный путь в его значение? (только в рамках функции листа, а не макросом)
Можно делать руками — копируем ячейку с результатом вычисления функции, специальная вставка вставить значение, F2, ENTER, но это совсем не то что хотелось бы!
Подскажите пожалуйста существует ли способ заставить функцию возвращать значение, а не путь.

спасибо.

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

#11

04.08.2014 01:08:34

и вот ещё. Есть способ решить задачу с помощью ADO. Макрос, который это делает я нашёл, но переделать его пользовательскую функцию не могу.

Код
Function извлечение(path, file, sheet, ref)
Set cn = CreateObject("ADODB.Connection")
path = ThisWorkbook.path & "" & path
If Right(path, 1) <> "" Then path = path & ""
t = path & file
cn.Open "Provider='Microsoft.Jet.OLEDB.4.0';Data Source='" & t & "';Extended Properties='Excel 8.0;HDR=No;IMEX=1';"
Set rs1 = cn.Execute("select * from [" & sheet & ref & ":" & ref & "]") 

дальше в макросе было так:

Код
Cells(5, 5).CopyFromRecordset rs1

как это правильно написать в функции я не знаю.

Код
End Function

вообще возможно такое сделать в функции листа?

спасибо!

Изменено: Максим04.08.2014 01:24:27
(оформил код тегом)

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Максим, код следует оформлять тегом. Привыкайте.

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#13

04.08.2014 01:34:35

Cells(5, 5).CopyFromRecordset rs1

Код
извлечение=rs1.fields(0).value

хотя это полное извращение дергать ADO recordset, и использовать его как функцию
Хотя разовые применения вполне допустимы.

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

ооуеее!

B.Key

спасибо вам! наконец-то у меня хоть что-то заработало! :)

да, везде на форумах пишут что применение ADO для извлечения данных из закрытой книги это вроде как изврат, но ничего другого, применимого к функции листа, я не нашёл

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

Это не изврат, а вполне нормальное решение и довольно скоростное. Просто использовать его его надо с умом :))

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#16

04.08.2014 01:47:24

Цитата
B.Key пишет: хотя это полное извращение
Цитата
B.Key пишет: Это не изврат, а вполне нормальное решение

я так и не понял…   :D

F1 творит чудеса

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#17

04.08.2014 10:18:14

Получение значения одной ячейки с помощью ADO это изврат, а использовать ADO для других целей (не буду уточнять) вполне хорошее решение.

Скрытый текст

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#18

04.08.2014 11:09:50

Цитата
Максим пишет:
почему указанная выше пользовательская функция скрыто открывает книгу с данными, но не закрывает её потом

Функция закрывает книгу 100%. За это отвечает строка:

Код
objCloseBook.Close False

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

Дима, в моём сообщении #9 об этом и говорилось.
просто на основе кода.
потом я его проверил.
для файлов *.xls, открываемых из Excel 2010 это почему-то не так.
файла нет в списке открытых, тем не менее при повторном пересчете функции или при ручном открытии файла Excel действительно почему-то выдает сообщение о том, что файл уже открыт.
поэтому я и откорректировал своё сообщение.

причина мне непонятна.
возможно — режим совместимости для файлов *.xls, возможно — какие-то особенности GetObject
думаю, GetObject имеет смысл заменить на Workbooks.Open

Изменено: ikki04.08.2014 11:37:30

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#20

04.08.2014 11:38:18

Что-то мне подсказывает, что эта строка:

Код
Set rs1 = cn.Execute("select * from [" & sheet & ref & ":" & ref & "]")

выбьет в ошибку. Символа одного не хватает:

Код
Set rs1 = cn.Execute("select * from [" & sheet & "$" & ref & ":" & ref & "]")

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

я решил что «$», как указатель «абсолютности» тут ни к чему и убрал его. Возможно я ошибаюсь и этот символ тут для другого было нужен, но без него работает.

тут я ошибался. $ нужен

Изменено: Максим04.08.2014 16:09:31
(исправил и убрал не корректный пример )

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#22

04.08.2014 15:12:50

Я может чего не так понял, но в приложенном файле строка выглядит так:

Код
Set rs1 = cn.Execute("select * from [Лист1$a1:a1]")

т.е. знак $ присутствует. Попробуйте теперь его из этой строки убрать и заново пересчитать функцию.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

#23

04.08.2014 16:06:20

ой! и правда. прошу прощения. я был уверен что у меня эта строка в функции «закомменчена». Действительно, Ваша правда — без $ не работает. спасибо за подсказку!

Прикрепленные файлы

  • ссылка на закрытую книгу.rar (17.67 КБ)

Как сослаться или связать значение в закрытом / закрытом файле книги Excel?

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

Контрольное значение из закрытого / закрытого файла Excel с формулой
Вставьте все данные определенного рабочего листа из неоткрытого/закрытого файла Excel с помощью Kutools for Excel


Контрольное значение из закрытого / закрытого файла Excel с формулой

Предположим, что ваша закрытая книга с именем test находится по пути E: Excel file на вашем компьютере, и вы хотите ссылаться на значение ячейки A2 из Sheet2 этой закрытой книги. Пожалуйста, сделайте следующее.

1. Выберите пустую ячейку, чтобы разместить значение ячейки, на которую указывает ссылка, введите формулу в панель формул и нажмите кнопку Enter ключ. Смотрите скриншот:

=INDEX(‘E:Excel file[test.xlsx]Sheet2’!A:A,2,1)

Заметки:

1). В формуле E: файл Excel — это полный путь к неоткрытой книге, тест.xlsx — это имя книги, Sheet2 — это имя листа, которое содержит значение ячейки, из которой вам нужно ссылаться, а A: A, 2,1 означает, что ячейка A2 будет указана в закрытой книге. Вы можете изменить их в зависимости от ваших потребностей.

2). Если вы хотите вручную выбрать лист для ссылки, примените формулу ниже. После применения формулы a Выбрать лист появится диалоговое окно, выберите рабочий лист и нажмите кнопку ОК. Тогда сразу же будет ссылка на определенное значение ячейки этого рабочего листа.

=INDEX(‘E:Excel file[test.xlsx]sheetname’!A:A,2,1)


Вставьте все данные определенного рабочего листа из неоткрытого/закрытого файла Excel с помощью Kutools for Excel

Если вы хотите вставить все содержимое листа из закрытого файла Excel, здесь я рекомендую вам Вставить файл в курсор полезности Kutools for Excel. Чтобы это сделать, выполните следующие действия.

1. Выберите пустую ячейку, с которой должен начинаться указанный рабочий лист, затем щелкните Кутулс Плюс > Импорт Экспорт > Вставить файл в курсор

2. в Вставить файл в курсор диалогового окна, нажмите Приложения кнопку.

3. в Выберите файл для вставки в позицию курсора ячейки диалоговом окне найдите и выберите закрытую книгу, на которую хотите сослаться, а затем нажмите Откройте кнопка. Смотрите скриншот:

4. Теперь он возвращается к вставке. Файл в курсоре диалоговом окне вы можете выбрать любой из Только значение (без формул) и Не передавать форматирование нужные вам параметры, а затем щелкните OK кнопка. В следующем всплывающем окне Выберите рабочий лист диалоговом окне, укажите рабочий лист и щелкните значок OK кнопка. Смотрите скриншот:

Теперь все содержимое выбранного рабочего листа указанной неоткрытой книги ссылается на текущий рабочий лист.

Внимание: Помимо ссылки на значения из неоткрытой книги, с помощью этой утилиты вы также можете ссылаться на значения из неоткрытого файла Txt или CSV.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


Статьи по теме:

  • Как ссылаться на формат и значение из другой ячейки в Excel?
  • Как ссылаться на рабочий лист по номеру индекса вместо имени в Excel?
  • Как удалить все ссылки на формулы, но сохранить значения в ячейках в Excel?
  • Как сохранить постоянную ссылку на ячейку формулы в Excel?
  • Как указать имя вкладки в ячейке в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Я хочу сослаться на значение ячейки в другой закрытой книге с помощью формулы (не VBA!). Имя листа сохраняется как переменная (в следующем примере C13 — «Лист2»).

Если другой файл открыт, то работает следующее:

=INDIRECT("[myExcelFile.xlsm]" & C13 & "!$A$1")

Если файл закрыт, приведенная выше формула не работает, так как не указан абсолютный путь. Но у меня получилось работать со следующим (обратите внимание на «вместо»:

='C:data[myExcelFile.xlsm]Sheet2'!$A$1

Теперь я хочу заменить жестко заданный «Sheet2» значением динамической ссылки, то есть значением C13 (как видно из первого фрагмента кода).

Кто-нибудь знает решение без использования VBA или других библиотек?

11 ответов

Абсолютно это невозможно сделать< /a> по стандартным формулам. Однако сумасшедший ответ можно найти здесь. Он по-прежнему избегает VBA и позволит вам получить результат динамически.

  1. Сначала создайте формулу, которая будет генерировать вашу формулу, но не добавляйте = в начале!

  2. Предположим, что вы создали эту формулу в ячейке B2 из Sheet1 и хотите, чтобы формула оценивалась в столбце c.

  3. Теперь перейдите на вкладку «Формулы» и выберите «Определить имя». Дайте ему имя myResult (или любое другое по вашему выбору) и в разделе «Ссылки на» напишите =evaluate(Sheet1!$B2) (обратите внимание на $)

  4. Наконец, перейдите к C2 и напишите =myResult. Потяните вниз и… вуаля!


12

Ben I.
18 Июл 2017 в 00:12

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

https://www.extendoffice.com/documents/excel/4226-excel-reference-unopened-file.html

В формуле E:Excel file — это полный путь к файлу неоткрытой книги, test.xlsx — имя книги, Sheet2 — имя листа, содержащего значение ячейки, на которое нужно ссылаться. , а A:A,2,1 означает, что в закрытой книге будет ссылка на ячейку A2. Вы можете изменить их в зависимости от ваших потребностей.

Если вы хотите вручную выбрать рабочий лист для ссылки, используйте эту формулу

=INDEX('E:Excel file[test.xlsx]sheetname'!A:A,2,1)

После применения этой формулы вы получите диалоговое окно «Выбор листа», выберите рабочий лист и нажмите кнопку «ОК». Затем будет немедленно указана ссылка на определенное значение ячейки этого рабочего листа.


4

kvantour
30 Янв 2018 в 21:41

Проблема в том, что ссылка на закрытый файл работает с index( но не с index(indirect(

Мне кажется, что это проблема программирования индексной функции. Я решил это с помощью строки предложения if

C2=sheetname
if(c2=Sheet1,index(sheet1....),if(C2="Sheet2",index(sheet2....

Я сделал это на пяти листах, это длинная формула, но она делает то, что мне нужно.


4

contrapost
25 Фев 2019 в 20:02

Проверьте функцию ИНДЕКС:

=INDEX('C:path[file.xlsm]Sheet1'!A10:B20;1;1)


3

fantaghirocco
3 Авг 2016 в 16:40

Спасибо за отличный вопрос. Я хочу уточнить и подтвердить решение, опубликованное Филиппом. Решение делает следующее:

  1. Обновляет данные из закрытого файла Excel и
  2. Делает это «динамически» (хотя и не совсем так — вы увидите)

В своем ответе выше Филипп сказал: «Проблема в том, что ссылка на закрытый файл работает с index( но не с index(indirect(»

Я считаю, что это все еще верно. (Я использую Office 365 здесь в марте 2021 года. Было бы так здорово, если бы Microsoft разрешила INDIRECT и INDEX прекрасно работать вместе с закрытыми файлами!)

Я могу подтвердить, что обходной путь Филиппа действительно работает, говоря практически. С точки зрения пользователя это похоже на то, что Крис, ОП, хочет сделать.

Допустим, вы хотите, чтобы содержимое данной ячейки было взято из Листа1, Листа2 или Листа3, которые находятся в закрытом файле myExcelFile.xlsm. Вы выберете лист, изменив содержимое конкретной ячейки (C13, как в вопросе ОП Криса). Один из способов сделать это — сделать его раскрывающимся списком (используя «Данные» > «Проверка данных» > «Разрешить [Список]»). Список будет иметь следующие имена:

Лист1 Лист2 Лист3

(Это будет обобщено без выпадающего списка. Например, вы можете просто ввести «Лист2» ​​в C13, и появятся соответствующие данные из закрытого файла; если вы затем наберете «Лист3», то данные из этого Вместо этого появится лист . Или у вас может быть столбец с именами листов и следующий столбец над [с приведенной ниже формулой, скорректированной] для вывода из закрытого файла.)

Ячейка, которая будет содержать ссылочные данные из другого закрытого листа (myExcelFile.xlsm), будет иметь:

=IFS(
C13="Sheet1",'C:data[myExcelFile.xlsm]Sheet1'!$A$1,
C13="Sheet2",'C:data[myExcelFile.xlsm]Sheet2'!$A$1,
C13="Sheet3",'C:data[myExcelFile.xlsm]Sheet3'!$A$1
)

Вот и все.

Это вызовет ошибку #REF в первый раз, когда вы сделаете это с закрытым myExcelFile.xlsm, но вы можете перейти в «Данные»> «Запросы и подключения»> «Редактировать ссылки»> «Обновить значения», и ваши значения из закрытого файла должны появиться. (Лично я настроил макрос с кнопкой для обновления вместо поиска в меню.) Волшебство заключается в том, что когда вы делаете «Обновить значения», данные со всех листов в закрытом файле загружаются в текущий Файл Excel — поэтому вам не нужно обновлять каждый раз, когда вы переключаете ссылку на другой лист (например, с Листа2 на Лист3).

Андрей


2

Dharman
27 Мар 2021 в 01:44

=ДВССЫЛ(«‘C:Data[«&A8&»]SheetNAME’!$G9″)

Где A8 содержит myExcelFile.xlsm

А G9 содержит ценные данные вашей исходной книги.


0

Allan
8 Сен 2016 в 00:33

В порядке,

Вот вам метод динозавра в Office 2010.

Напишите полный адрес, который вы хотите, используя конкатенацию (метод объединения текста «&»).

Сделайте это для всех адресов, которые вам нужны. Это должно выглядеть так:

=»=»&»‘ПОЛНЫЙ СЕТЕВОЙ АДРЕС, включая [имя электронной таблицы]»&W3&»‘!$w4″

W3 — это динамическая ссылка на лист, который я использую, а W4 — это ячейка, которую я хочу получить из листа.

Как только вы это сделаете, запустите сеанс записи макроса. Скопируйте ячейку и вставьте ее в другую. Я вставил его в объединенную ячейку, и это дало мне классическую ошибку «Тот же размер». Но одна вещь, которую он сделал, это вставила полученный текст из моей конкатенации (включая этот дополнительный «=»).

Скопируйте столько, сколько вы сделали это для. Затем зайдите в каждую вставленную ячейку, выберите текст и просто нажмите Enter. Он обновляет его до активной прямой ссылки.

Как только вы закончите, поместите курсор в удобное место и остановите макрос. Назначьте его кнопке, и все готово.

Это немного PITA, чтобы сделать это в первый раз, но как только вы это сделаете, вы просто подгоните квадратный колышек к этому проклятому круглому отверстию.


0

Guest guy
23 Мар 2017 в 15:37

Кажется, это работает с закрытым файлом: добавьте сводную таблицу (строки, табличный макет, без промежуточных итогов, без общих итогов) источника в текущую книгу, затем ссылайтесь на все, что вы хотите, из этой сводной таблицы, ДВССЫЛ, ПРОСМОТР,…


0

Anh
19 Фев 2021 в 22:51

Если вы знаете номер листа, на который хотите сослаться, вы можете использовать функцию ниже, чтобы узнать имя. Чем вы можете использовать его в НЕПРЯМОЙ функции.

Public Function GETSHEETNAME(address As String, Optional SheetNumber As Integer = 1) As String

    Set WS = GetObject(address).Worksheets
    GETSHEETNAME = WS(SheetNumber).Name

End Function

Это решение не требует, чтобы указанная рабочая книга была открыта — Excel откроет ее сам (но она будет скрыта).


-1

Stefan
28 Сен 2016 в 12:08

Я был разочарован, поэтому я сделал следующий обходной путь:

  1. Я создал свои НЕПРЯМЫЕ команды и сохранил их сразу за пределами желаемого диапазона. Конечно, я получаю ошибки, когда исходная книга закрыта, но они загораются, когда она открыта.
  2. Поэтому я временно открываю исходную книгу.
  3. Затем я создал макрос, который копирует формулы ДВССЫЛ из-за пределов диапазона и вставляет их внутрь диапазона. Все ячейки заполнены правильными значениями.
  4. Затем макрос копирует значения диапазона в диапазон поверх себя. Это удаляет формулы, но сохраняет их значения.
  5. Затем я закрываю исходную книгу. Мои значения остаются неизменными там, где я хочу, а мои НЕПРЯМЫЕ формулы остаются за пределами желаемого диапазона на случай, если я захочу обновить их, повторив процедуру!

Этот обходной путь избавляет меня от ошибки косвенных формул при закрытии исходной книги, а самое главное экономит много времени на пересчетах!

Надеюсь, это сработает и для вас!


-1

NikoSilver
13 Апр 2021 в 02:19

По крайней мере, в Excel 2016 вы можете использовать ДВССЫЛ с указанием полного пути; вся ссылка (включая имя листа) должна быть заключена в символы '.

Итак, это должно сработать для вас:

= INDIRECT("'C:data[myExcelFile.xlsm]" & C13 & "'!$A$1")

Обратите внимание на закрывающий ' в последней строке (т.е. '!$A$1 в окружении "")


1

Stephen Rauch
27 Июл 2018 в 04:23

Аналог функции ДВССЫЛ, работающий с закрытыми книгами

Автор IKor, 04.12.2008, 13:10

« назад — далее »

Господа,

Передо мной стоит задача получения информации из некоторого количества однотипных файлов (в настоящее время их около 20). Для этого в основном файле я определяю имена, ссылающиеся на диапазоны ячеек во внешних файлах, и затем обращаюсь к ним по указанному имени. К примеру =ИНДЕКС(Внешняя_Ссылка;1;1). Т.к. файлов много, то мне бы хотелось обращаться к ним, используя функцию ДВССЫЛ: =ИНДЕКС(ДВССЫЛ(А1);1;1), при этом А1=»Внешняя_Ссылка». К сожалению, функция ДВССЫЛ не работает с диапазонами, определенными в закрытых внешних файлах (так же как и функция СМЕЩ :( , и в отличии от функции ИНДЕКС :) ) — пока внешний файл открыт все работает нормально…
Поэтому сейчас мне приходится прописывать отдельно имена каждого из 20 внешних диапазонов.

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

Т.к. в VBA я не силен, то нельзя ли подробнее расписать как интегрировать новую функцию файл Excel. Должна ли она быть прописана только в основном файле или во всех внешних файлах тоже?


Цитата: IKor от 04.12.2008, 13:10
К сожалению, функция ДВССЫЛ не работает с диапазонами, определенными в закрытых внешних файлах.

Посмотрите в архиве тему: «Почему некоторые формулы не обновляются с закрытых книг?»

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


посмотрел…

Цитата: SIA Sterkhov
Возможные решения:
1) C помощью макросов обработки событий в вба. Измение происходит с помощью редактирования связи изменение источника связи ActiveWorkbook.ChangeLink Name:=»C:\book1.xls», NewName:=»C:\mybook.xls», _ Type:=xlExcelLinks Но нужно знать что на что заменять Прямое редактирование свзи в тексте формулы Cells.Replace What:=»[book2]», Replacement:=»[book1]», LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _ ReplaceFormat:=True
(Кстати с помощью данного способа можно не только менять источник связи но и адрес ячейки на которую сылается формула в закрытой книге.
2) Написание пользовательских функций использующих
а)SQL — запросы
б)механизм ADO
в)механизм скрытой книги, когда данные вычисляются с помощью прямых формул в скрытой книге, а результаты этих вычисление передаются в «динамическую формулу»

Перечитывал я на днях Канта и понял: Корней Чуковский мой писатель! (с)

Что мне пришло в голову после прочтения:
— можно создать новую пользовательскую функцию, в которую в качестве аргумента передавать строку текста.
— по результатам анализа оценить является ли текст ссылкой и ссылается ли он на открытую или закрытую книгу.
— в том случае, если книга закрыта, то воспользоваться всеми теми советами, что предложены выше и получить «правильную ссылку»;
— а ссылку на открытую книгу или «правильную ссылку» использовать в стандартной формуле INDIRECT (ДВССЫЛКА), вызываемой с помощью Formula Property
— результат возвращать в качестве результата самой функции.

В любом случае, я этого сам не осилю  ::) так, прошу помощи зала.


Цитата: IKor от 04.12.2008, 16:26
Что мне пришло в голову после прочтения:…

А я рассчитывал, что Вам придёт в голову воспользоваться функцией INDIRECT.EXT ;)
Ссылка на офсайте клинит, но могу поделиться, если не найдёте.

Я вот так подумал:

  • 1) копошащиеся источники связи – оригинально, но ни к чему, потому что если мы уж используем события листа, то можем открыть закрытую книгу и почитать её;
  • 2) пользовательские функции с SQL/ADO – в самый раз, можно клепать. ;)
  • 2в) динамической формулой брать параллельный результат вычисления другой формулы может вести себя нестабильно, если вообще удастся развернуть последовательность вычислений вспять.

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


Цитата: Шпец Докапыч от 04.12.2008, 18:40
А я рассчитывал, что Вам придёт в голову воспользоваться функцией INDIRECT.EXT ;)

Так это же надо грамотным быть. Я о Morefunc for Excel и не знал ни чего до сего дня.
Действительно оф. сайт ничего не дает (причем на английской странице объевлена версия 5.05 от 1-12-08, а на французской — 5.06 от того же числа) :)
В любом случае я скачал комплект 5.06 отсюда и установил его.

Возможно, мне не понятны все настройки INDIRECT.EXT, но я не нашел отличий в работе обычной ДВССЫЛ и INDIRECT.EXT — несмотря на официально заявленную поддержку работы с закрытыми книгами :(

Мало того, что обе функции разучились поддерживать диапазон из внешней книги, которому присвоено имя в данной книге — по-моему у меня раньше получалось…
Но и различия в их работе не наблюдается :(

См. приложенные файлы.

И еще одна проблема: мой общий файл должен открываться не только с моего компа, где уже установлен пакет MoreFunc, но и с чужих. Конечно пакет бесплатен, но мой it-шник будет просто счастлив, устанавливая его на три десятка компьютеров…


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Аналог функции ДВССЫЛ, работающий с закрытыми книгами

Как получить данные из закрытого файла Excel

Добрый день, уважаемые подписчики и читатели блога! 

Сегодня мы поговорим о получении данных из закрытых файлов Excel. В одном из предыдущих уроков рассматривалась та же задача, но с применением макроса. Теперь посмотрим как обойтись без него.

Способ №1

Воспользуемся строкой формул, это самый простой и понятный способ действий. Представим картину: есть папка с несколькими книгами Excel; в каждой книге несколько листов, они заполнены данными; эти данные нужно собрать в один общий файл.

Как получить данные из закрытого файла Excel

Итак, книга «Итог» должна собрать из файла «Магазины» наименование магазина за определённый месяц и из файла «Продажи» сумму продаж за каждый месяц по магазинам.

Взглянем в строчку формул книги «Итого» на листе «январь». 

=’C:папка[Продажи.xlsx]январь’!$B$3

Как получить данные из закрытого файла Excel

Весь фокус заключается в чём — необходимо путь до папки с файлом заключить в кавычки, имя файла заключить в квадратные скобки, далее через знак восклицания указать адрес ячейки откуда хотим забрать данные.

=’C:папка[Магазины.xlsx]январь’!$A$3

Как получить данные из закрытого файла Excel

Точно так же и с именем магазина, который подгружается из файла «Магазины».

Итог: необходимо правильно прописать имена файлов и их пути. 

Способ №2

Воспользуемся Power Query.  Как им пользоваться мы рассматривали ранее.

Напомню — если у вас Excel версии 2013 придётся установить этот модуль дополнительно. Если Excel 2016 он уже будет в комплекте.

Переходим на вкладку «Power Query», нажимаем кнопку «Из файла» и выбираем вариант «Из файла Excel».

Как получить данные из закрытого файла Excel

В появившемся окне выбираем файл из которого нужно выгрузить информацию.

Как получить данные из закрытого файла Excel

Далее выберем информацию с каких листов нужно загрузить. Щёлкаем галку «Несколько элементов» и отмечаем листы.

Как получить данные из закрытого файла Excel

Нажимаем кнопку «Загрузить в» и выбираем «Таблица», будет выгружена информация на новые листы. Если хотим всё на один лист — придётся по очереди выгружать каждый лист.

Как получить данные из закрытого файла Excel

Каждый лист загрузится в таблицу «Итог» и можно будет оперировать данными как угодно.

Как получить данные из закрытого файла Excel

Наведя курсор в часть запроса, можно будет увидеть подробную статистику по элементу Power Query.

Вот такие два способа получения данных из закрытых файлов Excel. Всем удачи!

Like this post? Please share to your friends:
  • Ссылка на другую ячейку на другом листе excel
  • Ссылка на другую страницу word
  • Ссылка на другую книгу в excel это
  • Ссылка на другой лист в одном файле excel
  • Ссылка на другой лист в excel это