Как сделать относительную ссылку на другую книгу в 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
без имен папок для перемещения.
у меня была аналогичная проблема, которую я решил, используя следующую последовательность:
использовать
CELL("filename")
функция для получения полного пути к текущему листу текущего файла.использовать
SEARCH()
функция для поиска начала строки [FileName]SheetName текущего файла excel и листа.использовать
LEFT
функция для извлечения полного пути к каталогу, содержащему текущий файл.добавить имя каталога нашел в шаге #3 имя файла, имя листа, а ссылка на ячейку, которую вы хотите открыть.
использовать
легче и короче через косвенные: 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 / / в вашей ссылке