Страницы: 1 2 След.
RSS
Функция для получения пути к файлу
 
Приветствую.
Необходимо, чтобы в ячейку B3 (а так же во все остальные) подставлялся путь, который будет выводиться в ячейку A1.
Что-то типа: =(A1)\[01.xlsm]Тек....
Видел варианты с VBA, но (если я правильно понял), везде надо выполнять команду. Имеется необходимость сделать это без каких-то дополнительных действий.
Функция "ЯЧЕЙКА" выводит путь с текущим именем листа. Просматривал все варианты, только VBA. Если есть возможность реализовать это через вба без дополнительных кликов, то так же прошу помочь с решением. Спасибо!
Изменено: Jonych - 13.01.2016 02:57:14 (Неверное отображение скриншота)
 
Так?
KL
 
Доброе время суток
Скорее требуется как в ячейке B10 на примере ячейки B7
Успехов.
 
Спасибо за решение.
=ЛЕВСИМВ(ЯЧЕЙКА("filename"); НАЙТИ("[";ЯЧЕЙКА("filename"))-1) - то, что необходимо. Однако проблема осталась нерешенная.
Сейчас пытаюсь реализовать: см. скриншот.
 
 Как показано в файле от Андрей VG

=ДВССЫЛ("'"&B5&"[01.xlsm]Текущий день'!C23")
будьте внимательны - не пропустите апострофы перед путем и перед восклицательным знаком.
KL
 
Можно еще так если хотите ссылаться на реальную ячейку в данном файле, чтобы динамически менять адрес:
=ДВССЫЛ("'"&$B$5&"[01.xlsm]Текущий день'!"&АДРЕС(СТРОКА(C23);СТОЛБЕЦ(C23)))
Изменено: KL - 01.03.2016 11:57:00
KL
 
Цитата
KL написал: =ДВССЫЛ("'"&B5&"[01.xlsm]Текущий день'!C23")
Хм. Только сейчас понял, что он выдает путь на ...\Desktop, хотя файл находится абсолютно в другой папке: C:\Users\Name1\Dropbox\Folder\
Функция:
Код
=ЛЕВСИМВ(ЯЧЕЙКА("filename"); НАЙТИ("[";ЯЧЕЙКА("filename"))-1)
выдает C:\Users\Name1\Desktop\
 
Формула =ЯЧЕЙКА("filename") выдает путь именно к тому файлу, в котором используется и не ошибается :)
KL
 
Вроде всё проверил, что не так?
P.S. Путь определяется верно, я с файлами запутался немного)
 
Все так, но ДВССЫЛ работает только с открытыми файлами
KL
 
Вот тут то вся и беда). Так как файл, который подбирает инфу из других файлов находится в дропбоксе, то путь постоянно меняется. + по завершению месяца переносится в отдельную папку. Использую ctrl+h и замену пути. Получается, автоматизировать данный процесс не получится.
P.S. Можно было бы перейти на тот же one drive, однако папку дропбокс можно хранить в определенном каталоге на диске (поэтому на нескольких компах одинаковый путь), но не на всех)
Изменено: Jonych - 14.01.2016 02:01:34
 
Ну теперь, когда я наконец понял, что вам нужно, вот вам ссылка на готовое решение:

http://spreadsheetpage.com/index.php/site/tip/a_vba_function_to_get_a_value_from_a_closed_fil­e/
KL
 
Примерно понял, что делают эти функции и как работает, но у меня больше тысячи ячеек :P. Писать скрипт по каждой - неверный метод)
 
Ну тогда вариантов почти не остаётся. Если файл используется только вами и не предназначен для рассылки, то поинтересуйтесь надстройкой написанной Laurent Longre, в которой есть функция листа INDIRECT.EXT или надстройкой написанной Harlan Grove, где есть функция листа PULSE. Я их сам не пробовал, но когда-то рекомендовали как решение. Вполне возможно, что за давностью лет они и перестали работать в последних версиях Excel, но может имеет смысл попытать счастья. Удачи.

добавлено: фунция PULSE, похоже, использует ADO, так что наверняка медленная.
Изменено: KL - 15.01.2016 02:25:49
KL
 
Ок. Спасибо вам большущее за помощь, буду пробовать :)
 
Хотя, у меня только что появилась идея, как реализовать через 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 Если вставлять путь через инпут бокс, то он отображается как ссылка именно. Полагаю, что замена символов до "[" решит проблему. Пора спать...)
Изменено: Jonych - 15.01.2016 03:48:45
 
Цитата
KL написал:
=ЯЧЕЙКА("filename") выдает путь именно к тому файлу, в котором используется и не ошибается
Кирилл, что-то меня терзают смутные сомнения...Если не указать второй аргумент(адрес ячейки), то функция вернет путь до активного на момент пересчета файла, а не путь до файла с функцией. Т.е. корректней будет так:
ЯЧЕЙКА("filename";A1)

Jonych, я так до конца и не понял, что Вам надо. Возможно, какой-нибудь вариант на макросах из моей статьи подойдет: Как получить данные из закрытой книги?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, согласен :)
KL
 
Если все-таки решу вопрос, то отпишусь) спасибо за помощь!)
 
Все-таки не получилось). Перейти на one-drive с динамическими путями (в зависимости от пользователя компа) не получится. Остается Dropbox со стационарным путем C:\Dropbox\Папка\файлы.xlsx
 
Накопал идею: http://forum.msexcel.ru/index.php?topic=1920.0. Там много всего, но смысл в том, чтобы сделать кнопку "обновить данные", и по нажатию в невидимом режиме открывается 31 файл, данные обновляются, файлы закрываются.  
 
Цитата
Jonych написал:
смысл в том, чтобы сделать кнопку "обновить данные"
и как же тогда "Реализация без VBA"?
 
Если речь про обновление связей, то в этой теме: http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=13757
я выкладывал решение.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Hugo написал: и как же тогда "Реализация без VBA"?
Если других вариантов нет, пробуем такой)
 
Заказал за 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

как вывести пусть файла в определенную ячейку?
Изменено: vaspup88 - 21.09.2019 16:07:05
 
vaspup88, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
 
Код
Sub Выбор_файла()
   Filename$ = GetFilePath()
   If Filename$ = "" Then Exit Sub
   MsgBox "Выбран файл: " & Filename$
   Range("A1") = Filename$ 'Добавлено
End Sub
 
Цитата
Юрий М написал:
код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
сделал :) извиняюсь...спасибо огромное!
Изменено: vaspup88 - 21.09.2019 16:08:14
 
а как сократить весь путь до имени файла с расширением? причем с выводом в определенную ячейку :)
Изменено: vaspup88 - 21.09.2019 20:29:43
Страницы: 1 2 След.
Наверх