Как сделать относительную ссылку на другую книгу в Excel?

Я создаю лист для расчета цен. Лист должен иметь ссылку на несколько других книг, чтобы получить цены на различные компоненты. Это отлично работает на моем компьютере, но когда я перемещаю их на сервер или другой компьютер, он не может найти ссылки.

моя папка структурирована следующим образом:

Folder
|-- prices.xlsx
|-- Fixed Components
|   |-- ComponentsA.xlsx
|   +-- ComponentsB.xlsx
|
+-- Variable Components
    |-- ComponentsC.xlsx
    +-- ComponentsD.xlsx

prices.xlsx - основной лист, который ссылается на другие листы. На моем компьютере он строит ссылки с абсолютным путем, поэтому, когда я копирую файлы путь остается фиксированным к моей машине, вместо того, чтобы ссылаться на файлы на другом компьютере.

есть ли способ сделать ссылки относительными, чтобы я мог поместить в основной лист что-то вроде ='Variable Components[ComponentsC.xlsx]Sheet1'!A1. Я бы не хотел использовать VBA для этого, поскольку люди не склонны доверять макросам, а затем жаловаться, что функции не работают.

5 ответов


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

http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651

кроме того, если вы можете поместить все файлы в одну папку вместо разделения их на подпапки, то Excel разрешит внешние ссылки без необходимости использования VBA даже при перемещении файлов в сетевое расположение. Ваши формулы тогда становятся просто ='[ComponentsC.xlsx]Sheet1'!A1 без имен папок для перемещения.


у меня была аналогичная проблема, которую я решил, используя следующую последовательность:

  1. использовать CELL("filename") функция для получения полного пути к текущему листу текущего файла.

  2. использовать SEARCH() функция для поиска начала строки [FileName]SheetName текущего файла excel и листа.

  3. использовать LEFT функция для извлечения полного пути к каталогу, содержащему текущий файл.

  4. добавить имя каталога нашел в шаге #3 имя файла, имя листа, а ссылка на ячейку, которую вы хотите открыть.

  5. использовать


легче и короче через косвенные: INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A:$AC0")

однако косвенные() имеет недостатки производительности, если много ссылок в книге

Я скучаю по конструкции, как:['../Data.ods']#Sheet1.A1 в LibreOffice. Намерение здесь: Если я создаю кучу мастер-книг и в зависимости от отчетов книги в ограниченном поддереве каталогов в исходной файловой системе, я могу zip весь поддерево каталога с полным пакетом книг и отправить его другому сотрудничающему лицу по электронной почте или около того. Он будет сохранен в некотором другом абсолютном pazth на целевой системе, но связь снова работает в новом абсолютном пути, потому что он был закодирован относительно корня поддерева.


использование функции =worksheetname() и =Indirect() и присвоение имен листам в Родительском файле Excel имени файла Excel с внешней ссылкой. Каждый файл excel с внешней ссылкой был в своих собственных папках с тем же именем. Эти подпапки были только для того, чтобы создать больше ясности.


Я сделал следующее: -

|----Колонка B---------------|----Колонка C------------|

R2) родительская папка --------> "C:\TEMP\Excel\"

R3) имя вложенной папки - - - > =worksheetname ()

R5) полный путь --------------> ="'"&C2&C3 & " ["&C3&".xlsx]Sheet1'!$A$1"

Р7) двссыл-----> =косвенные(С5,правда)

в главном файле, я сказал, 5 листов, помеченных как Ext-1, Ext-2, Ext-3, Ext-4, Ext-5. Копия вставила вышеуказанные формулы во все пять листов. Открыл все соответственно названные файлы Excel в фоновом режиме. Почему-то результатов не было автоматически вычисляя, следовательно, пришлось форсировать изменение, редактируя любую ячейку. Volla, значение в ячейке A1 каждого файла Excel с внешней ссылкой было в основном файле.


Предположим, вы связываете с общим диском, например, диск S? Если это так, другие люди, возможно, сопоставили диск по-другому. Вероятно, вам нужно использовать "официальное" имя диска //euhkj002/forecasts / bla bla. Вместо S / / в вашей ссылке