Страницы: 1 2 След.
RSS
Изменение пути к файлу с помощью формулы (функции)
 
Здравствуйте! Не смог найти в интернете ответ на следующий вопрос:
Открыт файл "Документация 3.xlsm.".
В ячейке А1 имеется формула: ='E:\Работа\[Документация 2.xlsm]Данные'!$B5, которая отображает данные из ячейки $B5 файла "Документация 2.xlsm."
Как поменять в ячейке А1 текст (адрес) "E:\Работа\[Документация 2.xlsm]" на путь к файлу "Документация 1.xlsm." , чтобы в А1 отображались данные из ячейки $B5 файла "Документация 1" не руками, а формулами (функцией).
Грубо говоря в ячейке В1 находится текст "E:\Работа\[Документация 2.xlsm]", и в итоге формула ='B1'!$B5 давала бы данные из ячейки $B5 файла "Документация 1".
(жаль что так нельзя :) ). Заранее спасибо!
 
Попробуйте функцию ДВССЫЛ()
Алексей М.
 
Эта функция не работает при закрытом файле, как я понял...
 
Здравствуйте! Можно так попробовать, если устроит:
Код
 =ДВССЫЛ("'E:\Работа\[Документация"&A2&".xlsm]Данные'!$B5"
В "А2" вводите нужную цифру - 1, 2 и т.д. (№ нужного файла "Документация"), и в "А1" будет отображаться значение из "В5" в выбранном файле. Либо писать макрос - окно с выбором нужного файла.  
 
Здравствуйте. С помощью формулы вряд ли получится. Запишите в В1 номер книги Документация и запустите макрос
Код
Sub Замена()
    Range("A1").Replace What:="Документация *.xlsm", Replacement:="Документация " & Range("B1") & ".xlsm"
End Sub
Изменено: gling - 27.05.2017 09:50:24
 
Хорошее решение, но у меня, грубо говоря, в каждой строке нужно менять адрес, и он всегда разный...в примере указал только одну строку для упрощения объяснения! Если только можно переделать этот макрос так, чтобы А1,А2,...Аn менялось на Лист1!В1,Лист1!В2,....Лист1!Вn, даже (если возможно) без запуска макроса!

Цитата
_Igor_61 написал: ДВССЫЛ
Эта функция работает только при открытом файле...
 
Цитата
Если только можно переделать этот макрос так, чтобы А1,А2,...Аn
не так написал... "Если только можно переделать этот макрос так, чтобы в Range("A1").Replace What:="Документация *.xlsm", звездочка (*) менялась на Лист1!В1,Лист1!В2,....Лист1!Вn, даже (если возможно) без запуска макроса!". Как-то так.
 
gling, подскажите, пожалуйста, как можно это оптимизировать?
Код
Sub Замена()
    Range("C1").Replace What:="Документация *.xlsm", Replacement:=Range("A1")
    Range("C2").Replace What:="Документация *.xlsm", Replacement:=Range("A2")
    Range("C3").Replace What:="Документация *.xlsm", Replacement:=Range("A3")
    Range("C4").Replace What:="Документация *.xlsm", Replacement:=Range("A4")
    Range("C5").Replace What:="Документация *.xlsm", Replacement:=Range("A5")
 End Sub
Изменено: school_sky - 27.05.2017 20:10:34
 
school_sky, Вы видите, как код выглядит у других? Вот и Вы так оформляйте: ищите такую кнопку и исправьте своё сообщение.
 
1.Оформите код как положено
2.Чтобы оптимизировать нужно знать(увидеть) что за данные в ячейках А1:А5. в моем коде немного по другому, поэтому не понятно почему всё название книги хотите менять на то, что записано в ячейках столбца А. А короче, нужен файл с примером, где можно будет попробовать этот макрос.
Изменено: gling - 27.05.2017 13:33:01
 
Цитата
gling написал:
А короче, нужен файл с примером, где можно будет попробовать этот макрос.
Извиняюсь за то, что новичок во всем этом. Как оптимизировать код в "Документация. Пример (файл №4).xlsm" если в столбце А будет 100 необходимых файлов, дабы не писать код для каждой строки?
Изменено: school_sky - 28.05.2017 00:24:43
 
Цитата
school_sky написал:
будет 100 необходимых файлов, дабы не писать код для каждой строки?
Не знаю что Вы изобретаете, но вариант для внедрения такой
Код
Sub Замена()
Dim rw As Long
rw = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To rw
      Range("B" & rw).Replace What:="Документация. *.xlsm", Replacement:="[" & Range("A" & rw) & "]"
Next
End Sub
 
Цитата
gling написал:
Не знаю что Вы изобретаете, но вариант для внедрения такой
Почти то, что нужно... Только почему-то код меняет текст только в последней строке...
Изменено: school_sky - 28.05.2017 00:16:42
 
Цитата
school_sky написал:
код меняет текст только в последней строке...
И точно, что это я, нужно вместо rw прописать i.
Код
Range("B" & i).Replace What:="Документация. *.xlsm", Replacement:="[" & Range("A" & i) & "]"
 
gling, спасибо большое!!! То что нужно)
 
Здравствуйте.
Мысли в продолжении данной дискуссии...
К примеру, имеется ячейка с формулой:
='E:\Папка\[ИмяФайла.xlsm]ИмяЛиста'!A30
Данная формула позволяет увидеть содержимое ячейки A30 (или любой другой) в соответствующем файле.
Если вручную перебить в этой формуле любую её часть (диск, папку, файл, лист или ячейку) то соответствующие также отобразятся.
При этом нет необходимости открывать требуемый файл, связь устанавливается автоматически. Но вручную как раз и не хотелось бы редактировать формулу.
А вот такой метод: =ДВССЫЛ(СЦЕПИТЬ("ячейка с указанием пути к файлу";"имя листа";"ячейка")) дает результаты только при открытом файле-источнике. После его закрытия возникает ошибка.
Вопрос, есть ли способ обойти эти ограничения?
 
Функциями листа - нет.
 
А функциями VBA?
 
Можно макросом.
 
Есть пример?
 
Поднимите глаза :)
 
Здесь же на форуме нашел функцию GetValue.
Но как она работает не понятно.
Выдает #ЗНАЧ
 
Эту?
Скрытый текст
Изменено: Hugo - 09.11.2017 18:34:46
 
В какое место поднять?...
 
На 6 постов выше, или ещё чуть... от моего поста.
Вернее можно начать читать с пятого.
Изменено: Hugo - 09.11.2017 18:37:05
 
Да эту #23
Логика работы GetValue именно та что нужно.
Но как получить результат не понятно.
Может что не так делаю.
И не понятно зачем нужны еще несколько кодов ниже...
 
Имелся в виду код из сообщения #5 - куда смотреть?
 
GetValue работает только в макросе, не на листе.
Как применять - я всё процитировал.
И зачем коды - там тоже всё написано :)
Изменено: Hugo - 09.11.2017 18:46:43
 
Спасибо.

Буду размышлять дальше...
 
Этот макрос вставляет в 4-й столбец выбранного ряда формулу "=2+2".
А отображается соответственное её результат "4".
Возможно ли как-то используя этот же принцип вставлять формулу пути к ячейке закрытой книги?
Пробовал так делать, формула вставляется, но с изменениями - наименование ячейки выделяется символами '  '
Из-за этого возникает ошибка #ИМЯ
Код
Sub InsertFormula2()
ActiveSheet.Cells(ActiveCell.Row, 4).FormulaR1C1Local = "=2+2"
End Sub
Страницы: 1 2 След.
Наверх