Приветствую. Необходимо, чтобы в ячейку B3 (а так же во все остальные) подставлялся путь, который будет выводиться в ячейку A1. Что-то типа: =(A1)\[01.xlsm]Тек.... Видел варианты с VBA, но (если я правильно понял), везде надо выполнять команду. Имеется необходимость сделать это без каких-то дополнительных действий. Функция "ЯЧЕЙКА" выводит путь с текущим именем листа. Просматривал все варианты, только VBA. Если есть возможность реализовать это через вба без дополнительных кликов, то так же прошу помочь с решением. Спасибо!
Спасибо за решение. =ЛЕВСИМВ(ЯЧЕЙКА("filename"); НАЙТИ("[";ЯЧЕЙКА("filename"))-1) - то, что необходимо. Однако проблема осталась нерешенная. Сейчас пытаюсь реализовать: см. скриншот.
Как показано в файле от Андрей VG =ДВССЫЛ("'"&B5&"[01.xlsm]Текущий день'!C23") будьте внимательны - не пропустите апострофы перед путем и перед восклицательным знаком.
Можно еще так если хотите ссылаться на реальную ячейку в данном файле, чтобы динамически менять адрес: =ДВССЫЛ("'"&$B$5&"[01.xlsm]Текущий день'!"&АДРЕС(СТРОКА(C23);СТОЛБЕЦ(C23)))
Вот тут то вся и беда). Так как файл, который подбирает инфу из других файлов находится в дропбоксе, то путь постоянно меняется. + по завершению месяца переносится в отдельную папку. Использую ctrl+h и замену пути. Получается, автоматизировать данный процесс не получится. P.S. Можно было бы перейти на тот же one drive, однако папку дропбокс можно хранить в определенном каталоге на диске (поэтому на нескольких компах одинаковый путь), но не на всех)
Ну тогда вариантов почти не остаётся. Если файл используется только вами и не предназначен для рассылки, то поинтересуйтесь надстройкой написанной Laurent Longre, в которой есть функция листа INDIRECT.EXT или надстройкой написанной Harlan Grove, где есть функция листа PULSE. Я их сам не пробовал, но когда-то рекомендовали как решение. Вполне возможно, что за давностью лет они и перестали работать в последних версиях Excel, но может имеет смысл попытать счастья. Удачи.
добавлено: фунция PULSE, похоже, использует ADO, так что наверняка медленная.
Хотя, у меня только что появилась идея, как реализовать через VBA.
Код
Sub Путь()
i = Application.ActiveWorkbook.Path
Range("B1") = i
End Sub
А так как путь у нас постоянный: ='C:\Dropbox\Folder\[03.xlsm]Текущий день'!$AJ$23, за исключением всего, что написано до символа "[", то можно далее добавить замену символов до "[" на то, что получается в B1 во всех ячейках. Реализуемо? 02:45 Получается, вся проблема в выборке всех символов до "[". Можно даже вручную проставить несколько диапазонов, чтобы не накосячить случайно. 02:49 Если первый символ = [, Paste B1, else удалить, repeat. Что-то типа такого. 03:47 Если вставлять путь через инпут бокс, то он отображается как ссылка именно. Полагаю, что замена символов до "[" решит проблему. Пора спать...)
KL написал: =ЯЧЕЙКА("filename") выдает путь именно к тому файлу, в котором используется и не ошибается
Кирилл, что-то меня терзают смутные сомнения...Если не указать второй аргумент(адрес ячейки), то функция вернет путь до активного на момент пересчета файла, а не путь до файла с функцией. Т.е. корректней будет так: ЯЧЕЙКА("filename";A1)
Jonych, я так до конца и не понял, что Вам надо. Возможно, какой-нибудь вариант на макросах из моей статьи подойдет: Как получить данные из закрытой книги?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Все-таки не получилось). Перейти на one-drive с динамическими путями (в зависимости от пользователя компа) не получится. Остается Dropbox со стационарным путем C:\Dropbox\Папка\файлы.xlsx
Накопал идею: http://forum.msexcel.ru/index.php?topic=1920.0. Там много всего, но смысл в том, чтобы сделать кнопку "обновить данные", и по нажатию в невидимом режиме открывается 31 файл, данные обновляются, файлы закрываются.
Заказал за 300р на фрилансе скрипт. Прикладываю ниже:
Код
Sub Обновить_пути()
thisdir = ThisWorkbook.Path ' расположение текущего файла
Application.DisplayAlerts = False
Set c = Cells.Find("Dropbox", LookIn:=xlFormulas)
If Not c Is Nothing Then
firstAddress = c.Address
Do
dirr = Cells(c.Row, c.Column).Formula
If InStr(dirr, "xls") <> 0 Then
dirr = Split(dirr, "\")
dirr2 = ""
For Each d In dirr
If InStr(d, "xls") = 0 Then
dirr2 = dirr2 & d & "\"
End If
Next
dirr2 = Replace(dirr2, "='", "")
f = CStr(Cells(c.Row, c.Column).Formula)
f2 = Replace(f, dirr2, thisdir & "\")
Cells(c.Row, c.Column).Formula = f2
End If
Set c = Cells.FindNext(c)
If c Is Nothing Then
Exit Do
End If
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Application.DisplayAlerts = True
End Sub
Здравствуйте! Помогите, я знаю. вам это будет легко имеется макрос
Код
Sub Выбор_файла()
Filename$ = GetFilePath()
If Filename$ = "" Then Exit Sub
MsgBox "Выбран файл: " & Filename$
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выбрать файл", _
Optional ByVal InitialPath As String = "c:\", _
Optional ByVal FilterDescription As String = "Файл Excel", _
Optional ByVal FilterExtention As String = "*.xls*") As String
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title:
.InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show <> -1 Then Exit Function
GetFilePath = .SelectedItems(1)
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
SaveSetting Application.Name, "GetFilePath", "folder", folder$
End With
End Function
Sub Выбор_файла()
Filename$ = GetFilePath()
If Filename$ = "" Then Exit Sub
MsgBox "Выбран файл: " & Filename$
Range("A1") = Filename$ 'Добавлено
End Sub