Excel получить имя файла с путем

In this guide, we’re going to show you how to get filename from path in Excel. We will cover how to do this with and without VBA.

Download Workbook

File path and file name

A file path is a string identifier that specifies the unique location in a file system. It contains folders in a hierarchical order following by a file name. Each element is separated by a delimiter which is usually a backslash «». The goal of getting filename from path is to parse that filename after the last delimiter.

Warning: If your paths contain another separator, update the formulas by replacing backslash («») with the separator character fits your case.

We will show you four different approaches to get filename from path in Excel.

Conservative method

Our first approach is using well known Excel functions MIN, SUBSTITUE and LEN to get the file name. You can use this formula in any Excel version.

=MID(<path>,FIND(«*»,SUBSTITUTE(<path>,»»,»*»,LEN(<path>)-LEN(SUBSTITUTE(<path>,»»,»»))))+1,LEN(<path>))

This formula has couple of steps:

  1. At the inner section, all separators («») get replaced with empty strings.
  2. The formula subtracts the length of substituted path (1) from original path to find the number of separators.
  3. The outer SUBSTITUTE function replaces the last separator («») with «*». Obviously, the last separator’s instance is equal to number of separators (2).
  4. Finally, the FIND locates the «*» character, and the MID function parses the file name after the character.

How to get filename from path in Excel 02 - Conservative

VBA with FileSystemObject

You can use VBA to create your own custom functions which you can use in worksheet as well. Of course, you can use this function in your macros as well.

The code is very short. It uses GetFileName method of FileSystemObject object. The important section of the code is the initializing of the object. The following code sets FileSystemObject object to fso variable.

Set fso = CreateObject(«Scripting.FileSystemObject»)

Once the object is initialized, use the GetFileName method by providing the path.

GetFileNameFromPath_FSO = fso.GetFileName(«C:Excel FilesDashboards.xlsm»)

The above line returns «Dashboard.xlsm» string. Here is the function version you can use in your worksheets as well.

Function GetFileNameFromPath_FSO(ByVal Path As String) As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    GetFileNameFromPath_FSO = fso.GetFileName(Path)
End Function

How to get filename from path in Excel 03-VBA

VBA with a recursive function

A recursive function is function which calls itself. The recursive approach acts like an iteration and helps us to parse values starting from the end of a string. You could have used recursive functions only in VBA until the LAMBDA function has been released. Because the most of Excel users do not have access to the LAMBDA function, we will show you VBA version which any Excel user can use.

This function has only few rows as well. The function’s name is GetFilenameFromPath_Recursive and take a single argument named Path.

The first row is a logical test that checks if the last character in the argument is a backslash («») or not and if the argument is not an empty string. If the test is passed, the function returns itself with the argument without its last character and the last character of the path. This is where the recursion occurs.

The function runs itself until coming up a backslash («») or not a character left. It parses the characters from the right side and combines them with each run.

The last row contains a standard End If statement which determines where the If block ends.

Function GetFilenameFromPath_Recursive(ByVal Path As String) As String
    If Right$(Path, 1) <> "" And Len(Path) > 0 Then
        GetFilenameFromPath_Recursive = GetFilenameFromPath_Recursive(Left$(Path, Len(Path) - 1)) & Right$(Path, 1)
    End If
End Function

Using LAMBDA to get filename from path

If you are Microsoft 365 subscriber, you can create recursive functions without using VBA. Briefly, the LAMBDA function is a special function that converts named ranges into user defined functions. Its syntax allows you to define arguments and a custom formula which uses that defined arguments.

For example, let’s say my custom function will have two arguments and returns multiplication of two arguments. All I need to is creating a named range, such as «MyLambda» and enter the following formula into Refers to box.

Syntax Sample Formula Sample Result
=LAMBDA(x, y, x*y) =MyLambda(2,3) 6

If you call the named range «MyLambda» in the «MyLambda» function, you will create a recursive function. Same logic can be applied to VBA function at previous section.

The following is the LAMBDA version of our VBA code. The function’s name is GetFileNameFromPath_Lambda. Check out how the function calls itself after IF function’s logical test.

=LAMBDA(Path,IF(AND(RIGHT(Path,1)<>»»,LEN(Path)>0),GetFileNameFromPath_Lambda(LEFT(Path,LEN(Path)-1))&RIGHT(Path,1),»»))

Warning: Do not forget to update formula name in the formula if you change the named range’s name. Otherwise, the function returns #NAME? error due to incorrect function name.

Using LAMBDA Function with different approach

Alternatively, you can use the LAMBDA function without calling the «function name».  The definition may sound complicated since you must call the function in the function by its name. This structure dictates you to update each occurrence of the name every time change the function’s name.

You can overcome this necessity by using another Microsoft 365-specific function called LET. The LET function allows you to define named ranges in a formula scope. You can define repeating values or blocks into these names and use them continuously.

If you define the name of the LAMBDA function in the formula, you can use the in-formula name over and over to make the function recursive. In our example, we create the name «Func» in the formula and call it within self. Outer LAMBDA function is to give the whatever name we want, «GetFileNameFromPath_LambdaMe».

=LAMBDA(Path,LET(Func,LAMBDA(ME,Path,IF(AND(RIGHT(Path,1)<>»»,LEN(Path)>0),ME(ME,LEFT(Path,LEN(Path)-1))&RIGHT(Path,1),»»)),Func(Func,Path)))

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше

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

Вставка текущего имени файла, его полного пути и имени активного листа

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

=ЯЧЕЙКА(«filename»)

Вставка текущего имени файла и имени активного листа

Введите или вставьте следующую формулу в виде формула массива, чтобы отобразить текущее имя файла и имя активного листа.

=ПРАВСИМВ(ЯЧЕЙКА(«filename»);ДЛСТР(ЯЧЕЙКА(«filename»))- МАКС(ЕСЛИ(НЕ(ЕОШ(ПОИСК(«»;ЯЧЕЙКА(«filename»); СТРОКА(1:255))));ПОИСК(«»;ЯЧЕЙКА(«filename»);СТРОКА(1:255)))))

Примечания: 

  • Чтобы ввести формулу в виде формулы массива, нажмите клавиши CTRL+SHIFT+ВВОД.

  • Формула возвращает имя листа, если он был сохранен хотя бы один раз. Если вы используете эту формулу на несохраненном листе, ячейка формулы останется пустой, пока вы не сохраните лист.

Вставка только текущего имени файла

Введите или вставьте следующую формулу, чтобы вставить имя текущего файла в ячейку.

=ПСТР(ЯЧЕЙКА(«filename»);ПОИСК(«[«;ЯЧЕЙКА(«filename»))+1; ПОИСК(«]»;ЯЧЕЙКА(«filename»))-ПОИСК(«[«;ЯЧЕЙКА(«filename»))-1)

Примечание: Если вы используете эту формулу на несохраненном листе, вы увидите сообщение об ошибке #ЗНАЧ! в ячейке. После сохранения листа ошибка заменяется именем файла.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Нужна дополнительная помощь?

Содержание

  1. Вставка в ячейку текущего имени файла Excel, пути или листа
  2. Вставка текущего имени файла, его полного пути и имени активного листа
  3. Вставка текущего имени файла и имени активного листа
  4. Вставка только текущего имени файла
  5. Дополнительные сведения
  6. Microsoft Excel
  7. Как получить список имен файлов, содержащихся в папке, а затем отобразить этот список на листе Excel
  8. Путь к текущей книге и новая функция LET
  9. Способ 1. Вручную
  10. Способ 2. Функция ЯЧЕЙКА
  11. Способ 3. Новая функция LET
  12. Путь к файлу
  13. Данная функция является частью надстройки MulTEx
  14. Excel получить имя файла с путем

Вставка в ячейку текущего имени файла Excel, пути или листа

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

Вставка текущего имени файла, его полного пути и имени активного листа

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

Вставка текущего имени файла и имени активного листа

Введите или вставьте следующую формулу в виде формула массива, чтобы отобразить текущее имя файла и имя активного листа.

=ПРАВСИМВ(ЯЧЕЙКА(«filename»);ДЛСТР(ЯЧЕЙКА(«filename»))- МАКС(ЕСЛИ(НЕ(ЕОШ(ПОИСК(«»;ЯЧЕЙКА(«filename»); СТРОКА(1:255))));ПОИСК(«»;ЯЧЕЙКА(«filename»);СТРОКА(1:255)))))

Чтобы ввести формулу в виде формулы массива, нажмите клавиши CTRL+SHIFT+ВВОД.

Формула возвращает имя листа, если он был сохранен хотя бы один раз. Если вы используете эту формулу на несохраненном листе, ячейка формулы останется пустой, пока вы не сохраните лист.

Вставка только текущего имени файла

Введите или вставьте следующую формулу, чтобы вставить имя текущего файла в ячейку.

Примечание: Если вы используете эту формулу на несохраненном листе, вы увидите сообщение об ошибке #ЗНАЧ! в ячейке. После сохранения листа ошибка заменяется именем файла.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Источник

Microsoft Excel

трюки • приёмы • решения

Как получить список имен файлов, содержащихся в папке, а затем отобразить этот список на листе Excel

В этой статье будет рассказано, как получить список имен файлов, содержащихся в каталоге, а затем отобразить этот список на листе. Данный способ связан с использованием макрофункции Excel 4 XLM в именованной формуле. Такой метод удобен, поскольку позволяет относительно легко выстроить на листе список имен файлов — обычно для этого требуются сложные макросы VBA.

Откройте новую книгу, а затем выполните следующие действия для создания именованной формулы.

  1. Выполните команду Формулы ► Присвоить имя, чтобы открыть диалоговое окно Создание имени.
  2. Впишите в поле Имя название Список.
  3. Введите следующую формулу в поле Диапазон (рис. 8.1): =ФАЙЛЫ(Лист1!$A$1) .
  4. Нажмите ОК, чтобы закрыть окно Создание имени.

Рис. 8.1. Работа с диалоговым окном для создания именованной формулы

Обратите внимание: функция ФАЙЛЫ не относится к стандартным функциям рабочего листа. Это макрофункция, написанная в сравнительно старом XLM-стиле и предназначенная для использования на специальном листе макросов. Она принимает один аргумент (путь к каталогу и описание файла) и возвращает массив имен файлов, содержащихся в данном каталоге и удовлетворяющих описанию файла. Обычные формулы рабочего листа не могут использовать подобные XLM-функции, а именованные формулы — могут.

Определив именованную формулу, введите в ячейку А1 путь к каталогу и описание файла. Например: C:Excelexpert.ru* *. Далее формула отображает первый найденный файл: =ИНДЕКС(Список;1) . Если изменить второй аргумент на 2, то будет отображен второй найденный файл и т. д. На рис. 8.2 приведен пример. Путь и описание файла указаны в ячейке А1. В ячейке А2 содержится следующая формула, скопированная далее по столбцу: =ИНДЕКС(Список;СТР0КА()-1) . Функция СТРОКА, используемая здесь, генерирует ряд последовательных натуральных чисел: 1,2,3 и т. д. Эти числа используются в качестве второго аргумента функции ИНДЕКС.

Рис. 8.2. Использование XLM-макроса в именованной формуле позволяет создать на листе список имен файлов

Обратите внимание: в ячейке А17 (и ниже) происходит ошибка. Дело в том, что в каталоге содержится всего 19 файлов и формула пытается отобразить имена несуществующих. Если изменить каталог или описание файла в ячейке А1, то формулы обновляются и выводят имена новых файлов.

Если вы пользуетесь такими приемами, то книгу нужно сохранить как файл с поддержкой макросов (в формате *.xlsm или *.xls).

Источник

Путь к текущей книге и новая функция LET

В повседневной работе с Microsoft Excel нередко возникают ситуации, когда хорошо было бы в какой-либо определенной ячейке вывести либо полный путь к текущей книге (от буквы диска до расширения), либо путь к текущей папке, где наша книга хранится. Сделать это можно несколькими способами.

Способ 1. Вручную

Идем в Файл — Сведения и жмём в верхней части кнопку Копировать путь (File — Info — Copy path) . После этого полный путь к текущей книге окажется у нас в буфере, откуда его можно вставить куда угодно стандартным образом (например, сочетанием клавиш Ctrl + V ).

Дешево и сердито, но при перемещении файла в другую папку придётся проделывать это всё ещё раз. Для автоматического обновления лучше использовать формулы.

Способ 2. Функция ЯЧЕЙКА

Уже очень давно в Excel есть встроенная функция ЯЧЕЙКА (CELL) , которая может выводить кучу разной полезной информации:

Если использовать её с аргументом «имяфайла» («filename») , то мы получим почти то, что нам нужно:

Останется только обрезать хвост после закрывающей квадратной скобки с помощью функций ЛЕВСИМВ (LEFT) и НАЙТИ (FIND) и убрать открывающую квадратную скобку функцией ПОДСТАВИТЬ (SUBSTITUTE) :

Способ 3. Новая функция LET

Как легко заметить, в предыдущей формуле дважды повторяется один и тот же фрагмент с функцией ЯЧЕЙКА. Чтобы немного сократить и упростить эту конструкцию, можно использовать новую обёрточную функцию LET:

Первым аргументом этой функции будет имя переменной (любое, например, s), вторым — значение этой переменной (наша функция ЯЧЕЙКА), третьим — результирующая формула с участием созданной переменной.

Источник

Путь к файлу

Данная функция является частью надстройки MulTEx

  • Описание, установка, удаление и обновление
  • Полный список команд и функций MulTEx
  • Часто задаваемые вопросы по MulTEx
  • Скачать MulTEx

Вызов команды:
MulTEx -группа СпециальныеОсобые возможностиПуть к файлу

Команда поможет вставить в ячейки имена всех выбранных файлов или одного конкретного, всех файлов в указанной папке и её подпапках, а так же создать список файлов и папок в виде активных гиперссылок. Плюс к этому команда может отбирать файлы на основании указанной маски(шаблона), что позволит отбирать либо файлы определенного типа, либо с определенными именами.
Для чего это может быть нужно? При использовании надстройки некоторые команды требуют указания полного пути к файлу или имен файлов(например команды: Пакетное переименование файлов, Отправка листа/книги по почте, Создание примечаний). С помощью команды Путь к файлу это можно сделать быстро и главное правильно.
Т.к. команда умеет создавать гиперссылки на файлы и папки, то можно создавать списки нужных файлов и папок для быстрого доступа к ним из одного листа.

Просматривать файлы:

  • только выбранные — после нажатия кнопки ОК появится диалоговое окно, в котором необходимо выбрать файлы для создания списка
  • все в папке — после нажатия кнопки ОК появится диалоговое окно выбора папки. Выбирается папка, файлы в которой необходимо просмотреть и создать список
    включая подпапки — доступно для пункта все в папке. Если установлен, то файлы будут просматриваться не только в указанной папке, но и во всех вложенных в неё папках до самой глубоко вложенной. Если отключен, то файлы будут просматриваться исключительно в указанной папке.

Отбирать файлы

  • все — будет создан список со всеми файлами без исключений
  • на основании маски — в данном случае в поле указывается шаблон и будут отбираться файлы, отвечающие маске шаблона. Например, если необходимо отбирать только файлы Excel, то можно указать маску: *.xls* . Если надо отбирать только файлы Word, содержащие в имени слово «инструкция», то маску можно задать как: *инструкция*.doc* .

Записать

    начиная с ячейки — указывается ячейка, начиная с которой будет записан результат. Если отобрано более одного файла/папки, то первый файл/папка записывается в указанную ячейку, а остальные в ячейки ниже. В каждой ячейке один файл/папка.
  • путь к папке каждого файла — в ячейки будут записаны пути к папке каждого отобранного файла. Имя самого файла в этом случае не записывается.
    исключить одинаковые папки — доступно при записи пути к папкам. Если установлен, то из результирующего списка папок будут исключены одинаковые пути к папкам. Может пригодиться для исключения задвоения путей, когда в одной папке находится несколько файлов для создания списка.
  • пути ко всем файлам — начиная с указанной ячейки на лист будут записаны полные пути к каждому файлу.
  • только имена файлов — будут записаны только имена файлов, без путей к папке. По умолчанию файлы записываются с зарегистрированным для них типом — расширением(файлы Excel: .xls, .xlsx, .xlsm, .xlst и т.д.)
    без расширения типа файла — доступно при записи имен файлов. В этом случае в ячейки записывается только имя файла, расширение файла не записывается.
  • Записать как гиперссылки — независимо от того, какой вариант записи выбран(пути к файлам или папкам), в ячейках можно создать гиперссылки на исходные файлы/папки. По нажатии на такую гиперссылку будет открыт исходный файл или папка. Файлы в этом случае открываются в программе, установленной по умолчанию для просмотра данного типа файлов. Например, файлы .doc будут открываться в Word, файлы .xls в Excel.

    Источник

    Excel получить имя файла с путем

    Модератор форума: китин, _Boroda_

    Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как вписать имя файла в ячейку формулой. (Макросы/Sub)

    Как вписать имя файла в ячейку формулой.

    koyaanisqatsi Дата: Пятница, 23.05.2014, 14:44 | Сообщение № 1

    На каждый новый день задается файл с датой завтра. Внутри файла есть ячейка с формулой которая пишет завтрашнюю дату но если открывать файл который будет актуален через день то формула будет выводить не актуальную дату а завтрашнего числа.

    Хочется сделать так чтобы название файла писалось в ячейке автоматом. тогда дата будет истинна.

    На каждый новый день задается файл с датой завтра. Внутри файла есть ячейка с формулой которая пишет завтрашнюю дату но если открывать файл который будет актуален через день то формула будет выводить не актуальную дату а завтрашнего числа.

    Хочется сделать так чтобы название файла писалось в ячейке автоматом. тогда дата будет истинна. koyaanisqatsi

    Сообщение На каждый новый день задается файл с датой завтра. Внутри файла есть ячейка с формулой которая пишет завтрашнюю дату но если открывать файл который будет актуален через день то формула будет выводить не актуальную дату а завтрашнего числа.

    Хочется сделать так чтобы название файла писалось в ячейке автоматом. тогда дата будет истинна. Автор — koyaanisqatsi
    Дата добавления — 23.05.2014 в 14:44

    Источник

    Adblock
    detector

    Mojakhed

    0 / 0 / 0

    Регистрация: 23.10.2012

    Сообщений: 13

    1

    Как получить путь к файлу и имя этого файла в переменные

    23.10.2012, 11:58. Показов 89685. Ответов 22

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Добрый день,

    Задача проста, есть решение, но оно не изящное, хотелось бы оптимизировать код. Все делается в VBA Excel 2010.
    Необходимо выбирая случайный фаил получать полный путь к этому файлу, а так же его имя в отдельные переменные. У меня это получилось сделать только в 2 этапа, т.е 2 раза выводя диалоговое окно. Хотелось бы это делать за 1 диалог.

    1. Получаем Имя файла

    Visual Basic
    1
    2
    3
    4
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    fName = Application.GetOpenFilename
    s = fs.GetFileName(fName)
    MsgBox s, vbInformation + vbOKOnly

    2. Получаем Путь к файлу (код не мой, помог Гугл)

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Function GetFolderPath(Optional ByVal Title As String = "Select Folder", _
                           Optional ByVal InitialPath As String = "c:") As String
       Dim PS As String: PS = Application.PathSeparator
        With Application.FileDialog(msoFileDialogFolderPicker)
            If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
            .ButtonName = "Select": .Title = Title: .InitialFileName = InitialPath
            If .Show <> -1 Then Exit Function
            GetFolderPath = .SelectedItems(1)
            If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
        End With
    End Function
     
    Path = GetFolderPath
    MsgBox Path, vbInformation + vbOKOnly

    Заранее спасибо



    0



    Programming

    Эксперт

    94731 / 64177 / 26122

    Регистрация: 12.04.2006

    Сообщений: 116,782

    23.10.2012, 11:58

    22

    Казанский

    15136 / 6410 / 1730

    Регистрация: 24.09.2011

    Сообщений: 9,999

    23.10.2012, 12:17

    2

    fName в первом коде — полный путь к файлу. Вы хотите разделить его на путь к папке и имя?
    Это можно сделать так:

    Visual Basic
    1
    2
    3
    4
    5
    
    FullPath = Application.GetOpenFilename
    i = InStrRev(FullPath, "") 'позиция последнего 
    Name = Mid(FullPath, i + 1)
    Folder = Left(FullPath, i - 1)
    MsgBox FullPath & vbLf & Name & vbLf & Folder



    2



    0 / 0 / 0

    Регистрация: 23.10.2012

    Сообщений: 13

    23.10.2012, 15:18

     [ТС]

    3

    Благодарю, вопрос исчерпан.



    0



    Hugo121

    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    23.10.2012, 17:30

    4

    Так попробуйте в первом коде:

    Visual Basic
    1
    
    MsgBox fName & vbNewLine & s, vbInformation + vbOKOnly

    Получите «полный путь к этому файлу, а так же его имя в отдельные переменные».



    0



    0 / 0 / 0

    Регистрация: 23.10.2012

    Сообщений: 13

    23.10.2012, 19:14

     [ТС]

    5

    To Hugo121

    Наверное я не достаточно четко сформулировал задачу, в любом случае, Казанский помог с решением проблемы. Я получил что хотел.
    Под полным путем подразумевалось путь до файла без его имени, т.е «C:temp» в одну переменную и имя файла «asd.txt» в другую переменную.

    В следующий раз буду четко формулировать. Спасибо.



    0



    Hugo121

    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    23.10.2012, 20:55

    6

    Ну когда есть полный путь и имя — легко от полного пути отрезать на длину имени…

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    
    Sub tt()
        Set fs = CreateObject("Scripting.FileSystemObject")
        fname = Application.GetOpenFilename
        s = fs.GetFileName(fname)
        ss = Left(fname, Len(fname) - Len(s))
        MsgBox fname & vbLf & ss & vbLf & s, vbInformation, vbOKOnly
    End Sub



    0



    rattrapper

    foo();

    886 / 587 / 222

    Регистрация: 03.07.2013

    Сообщений: 1,549

    Записей в блоге: 2

    09.07.2013, 16:29

    7

    нужна помощь, у меня код не работает(exel’13)
    нашел отличный faq по добавлению модулей,

    Цитата
    Сообщение от Dragokas
    Посмотреть сообщение

    Импорт модуля проекта из файла

    Visual Basic
    1
    
    ИмяПроекта.VBProject.VBComponents.Import *"Путь и ИмяФайла"

    у меня нужные модули находятся в том же месте, что и книга, но я никак не могу получить полный путь к книге программно!
    GetOpenFilename — в любом случае вызывает окно выбора файла
    еще пробовал HKEY_CURRENT_USERDesktop — выдает ошибку
    мой код:

    Visual Basic
    1
    2
    3
    4
    5
    6
    
    Sub AddMacro()
    With ThisWorkbook.VBProject.VBComponents
        .Import "путь к книге???"  Module1.bas
        .Import "путь к книге???"  mw2.frm
    End With
    End Sub

    Добавлено через 36 минут

    Цитата
    Сообщение от rattrapper
    Посмотреть сообщение

    никак не могу получить полный путь к книге программно

    как же все просто)
    кому нужно thisworkbook.path



    0



    ExpressFX

    2 / 2 / 0

    Регистрация: 24.10.2015

    Сообщений: 1

    24.01.2016, 18:54

    8

    Пути к файлу и имя файла — просто как 2+2 !

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    
    Sub ShowPathAndName()
        Dim FullName$, Filename$, FilePath$
        FullName = "C:Worktest.txt"
        Filename = Dir(FullName) ' Сработает только если файл по указанному пути реально существует
        FilePath = Left(FullName, Len(FullName) - Len(Filename))
        MsgBox "Путь к файлу - " & FilePath & vbCrLf & "Имя файла - " & Filename
    End Sub

    Выйдет сообщение:
    Путь к файлу — C:Work
    Имя файла — test.txt

    Просто и не нужно извращаться!



    2



    4 / 4 / 0

    Регистрация: 29.06.2015

    Сообщений: 17

    29.01.2016, 13:41

    9

    ActiveWindow.Caption возвращает имя открытого окна, т.е. имя файла без расширения.



    0



    Казанский

    15136 / 6410 / 1730

    Регистрация: 24.09.2011

    Сообщений: 9,999

    29.01.2016, 15:20

    10

    Федоров, …если заголовок окна не поменяли

    Visual Basic
    1
    
    activewindow.Caption="Федоров"



    0



    0 / 0 / 0

    Регистрация: 07.09.2015

    Сообщений: 4

    18.03.2016, 14:08

    11

    доброго дня всем, подскажите, а как теперь получаемые ответы вывести в ячейку? и чтоб без диалогового окна? просто выбор файла, а результат в ячейке, а не в окне.
    спасибо.



    0



    Hugo121

    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    18.03.2016, 14:19

    12

    Вместо Msgbox пишите

    Visual Basic
    1
    
    [A1]=

    — получите вместо сообщения строку в ячейке.



    1



    0 / 0 / 0

    Регистрация: 07.09.2015

    Сообщений: 4

    18.03.2016, 15:24

    13

    благодарю, то что надо

    Добавлено через 1 минуту
    есть файл эксель в котором происходят вычисления и есть файлы эксель в которых данные для этих вычислений. по кнопке в первом файле происходит вышеописанный скрипт, в ячейке получаю путь до файла и уже в нужные ячейки подставляются данные из полученного файла. вопрос: если по нажатию кнопки подставить другой файл с данными, то сразу он не обновляет данные, обновить если нажать «данные» — «источник связи» — здесь указать источник — «обновить», тогда выдается запрос на нужный файл и данные обновляются. можно ли автоматизировать это обновление?



    0



    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    18.03.2016, 16:12

    14

    Используете ДВССЫЛ()? Она не в всех формулах работает. Если всё равно используете макрос — так сразу и формируйте макросом полностью формулы, или вообще делайте всю работу макросом.



    0



    0 / 0 / 0

    Регистрация: 07.09.2015

    Сообщений: 4

    21.03.2016, 07:20

    15

    ДВССЫЛ не успользую, а в макросах не силен совсем.
    вот формула =[AW104]Данные!$B$18, по которой подтягиваются данные из внешних источников, а ячейка AW104 получает полный путь файла источника по вышеприведенному макросу.



    0



    Hugo121

    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    21.03.2016, 09:22

    16

    Попробуйте после замены файла

    Visual Basic
    1
    
     ActiveWorkbook.RefreshAll

    или

    Visual Basic
    1
    
    Calculate



    0



    0 / 0 / 0

    Регистрация: 07.09.2015

    Сообщений: 4

    21.03.2016, 11:04

    17

    нет, не работает ни в теле первого макроса, ни с отдельной кнопки((
    может быть подскажите другое решение? мне пришло только озвученное выше: есть файл калькуляции в эксель и есть файлы эксель с данными клиентов. имена файлов с данными клиентов разные и в разных местах. нужно чтобы данные клиентов подтягивались в файл калькуляции с минимальными телодвижениями юзверей.



    0



    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    21.03.2016, 11:30

    18

    Попробуйте так — копируете любой файл клиента под именем например шаблон.xls, настраиваете все нужные формулы на импорт из этого файла.
    Сохраняете файл, ставите ему «только для чтения».
    Удаляете шаблон.xls.
    Юзер открывает файл с формулами, в диалоге обновления связей указывает файл нужного клиента. Посмотрел, если нужно сохранить — сохранил с любым другим именем.
    Но можно конечно всё делать макросом — юзер жмёт кнопку, указывает файл, смотрит данные. Вообще всё без формул.



    0



    Ivan_Ivanovich

    0 / 0 / 0

    Регистрация: 01.02.2016

    Сообщений: 29

    14.04.2016, 09:59

    19

    Здравствуйте, а подскажите пожалуйста как сделать так, чтобы можно было просто выбирать файл через диалоговое окно, не указывая при этом путь к файлу и само название файла. Нужно, чтобы была возможность выбрать любой файл на компьютере .xlsx и далее с ним работать (импортировать из него).
    При помощи данного кода открывается диалоговое окно, можно выбрать файл, но он как я понимаю не выбирается (не используется в дальнейшем как нужно мне). Я данный код превратил в комментарии и ничего не поменялось в работе.

    PureBasic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    Private Sub SelectStudent_Click()
     
    Dim FName As String
    Dim result As Integer
    With Application.FileDialog(1)
       .Title = "Select file"
       .InitialFileName = "C:BD" 'default path Путь по умолчанию
       .AllowMultiSelect = False
       .Filters.Clear
       .Filters.Add "MS Excel", "*.xlsx", 1
    result = .Show
     
    If result = 0 Then Exit Sub
    FName = Trim(.SelectedItems.Item(1))
    End With

    А вот продолжение кода в форме, при помощи которого 100% идет выбор файла (только автоматически, по прописанному пути и файлу, а нужно, чтобы можно было любой файл выбрать, чтобы не был заранее прописан код для файла) и уже выполнялась работа с ним.

    PureBasic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    Dim app As Object, wrk As Object
    Dim rst As dao.Recordset
     
    Set rst = CurrentDb.OpenRecordset("select * from Marks")
    Set app = CreateObject("excel.application")
    Set wrk = app.workbooks.Open("C:BDsample.xlsx")
     
    rst.AddNew
     
    rst![mrk_id] = Nz(DMax("mrk_id", "Marks"), 0) + 1
    rst![Module] = Modul(app.range("A14"))
    rst![Hours] = app.range("C15")
     
     
    rst.Update
    app.Quit
     
    End Sub



    0



    6875 / 2807 / 533

    Регистрация: 19.10.2012

    Сообщений: 8,562

    14.04.2016, 10:04

    20

    Т.е. не пробовали то, что я предлагаю?



    0



    Предположим, у вас есть рабочий лист, содержащий список путей к файлам, теперь вы хотите извлечь только имя файла (правая часть последней обратной косой черты) из каждого пути, как показано на следующих снимках экрана. Есть ли какие-нибудь быстрые приемы для решения этой задачи?

    Извлечь имя файла из полного пути с формулой в Excel
    Извлечь имя файла из полного пути с помощью функции, определяемой пользователем
    Извлечь имя файла из полного пути с кодом VBA


    Извлечь имя файла из полного пути с формулой в Excel

    В Excel вы можете использовать приведенную ниже формулу, чтобы быстро извлечь только имя файла из полного пути.

    Выберите пустую ячейку, введите в нее приведенную ниже формулу и нажмите Enter .

    =MID(A1,FIND(«*»,SUBSTITUTE(A1,»»,»*»,LEN(A1)-LEN(SUBSTITUTE(A1,»»,»»))))+1,LEN(A1))

    Tips: A1 — это ячейка, из которой вы хотите извлечь имя файла), и нажмите кнопку Enter, затем перетащите маркер заполнения, чтобы заполнить нужный диапазон. После этого имя файла извлекается из каждой ячейки.

    выдержка из документа имя1


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

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

    1. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.

    2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.

    Function FunctionGetFileName(FullPath As String) As String
    'Update 20140210
    Dim splitList As Variant
    splitList = VBA.Split(FullPath, "")
    FunctionGetFileName = splitList(UBound(splitList, 1))
    End Function
    

    3. Нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно и вернитесь к рабочему листу. В пустой ячейке, например B1, введите в нее приведенную ниже формулу и нажмите Enter .

    =FunctionGetFileName(A1)

    doc-extract-filenames1

    Затем снова выберите ячейку B1, перетащите маркер заполнения в диапазон, в котором вы хотите применить эту формулу, и все имена файлов были извлечены из полных путей, как следующий результат:

    doc-extract-filenames1


    Извлечь имя файла из полного пути с кодом VBA

    Помимо функции, определяемой пользователем, код VBA также может помочь вам извлечь имена файлов. Пожалуйста, сделайте так:

    1. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.

    2. Нажмите Вставить > Модулии вставьте следующий код в окно модуля.

    Sub GetFileName()
    'Update 20140210
    Dim Rng As Range
    Dim WorkRng As Range
    Dim splitList As Variant
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    Set WorkRng = Application.Selection
    Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
    For Each Rng In WorkRng
        splitList = VBA.Split(Rng.Value, "")
        Rng.Value = splitList(UBound(splitList, 1))
    Next
    End Sub
    

    3, Затем нажмите F5 ключ для запуска этого кода и выберите диапазон, из которого вы хотите извлечь имя файла, см. снимок экрана:

    doc-extract-filenames1

    4, Затем нажмите OK, имена файлов были извлечены из выбора следующим образом:

    Внимание: С этим кодом VBA исходные данные будут уничтожены, поэтому вы должны скопировать их перед применением этого кода.


    Лучшие инструменты для работы в офисе

    Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

    • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
    • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
    • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
    • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
    • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
    • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
    • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
    • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
    • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

    вкладка kte 201905


    Вкладка Office: интерфейс с вкладками в Office и упрощение работы

    • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
    • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
    • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

    офисный дно

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Приветствую.
    Необходимо, чтобы в ячейку B3 (а так же во все остальные) подставлялся путь, который будет выводиться в ячейку A1.
    Что-то типа: =(A1)[01.xlsm]Тек….
    Видел варианты с VBA, но (если я правильно понял), везде надо выполнять команду. Имеется необходимость сделать это без каких-то дополнительных действий.
    Функция «ЯЧЕЙКА» выводит путь с текущим именем листа. Просматривал все варианты, только VBA. Если есть возможность реализовать это через вба без дополнительных кликов, то так же прошу помочь с решением. Спасибо!

    Изменено: Jonych13.01.2016 02:57:14
    (Неверное отображение скриншота)

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    Так?

    Прикрепленные файлы

    • Book1.xlsx (9.16 КБ)

     

    Андрей VG

    Пользователь

    Сообщений: 11878
    Регистрация: 22.12.2012

    Excel 2016, 365

    Доброе время суток
    Скорее требуется как в ячейке B10 на примере ячейки B7
    Успехов.

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Спасибо за решение.
    =ЛЕВСИМВ(ЯЧЕЙКА(«filename»); НАЙТИ(«[«;ЯЧЕЙКА(«filename»))-1) — то, что необходимо. Однако проблема осталась нерешенная.
    Сейчас пытаюсь реализовать: см. скриншот.

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

     Как показано в файле от Андрей VG

    =ДВССЫЛ(««&B5&»[01.xlsm]Текущий день!C23″)
    будьте внимательны — не пропустите апострофы перед путем и перед восклицательным знаком.

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    Можно еще так если хотите ссылаться на реальную ячейку в данном файле, чтобы динамически менять адрес:
    =ДВССЫЛ(««&$B$5&»[01.xlsm]Текущий день!»&АДРЕС(СТРОКА(C23);СТОЛБЕЦ(C23)))

    Изменено: KL01.03.2016 11:57:00

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    #7

    14.01.2016 00:46:44

    Цитата
    KL написал: =ДВССЫЛ(«‘»&B5&»[01.xlsm]Текущий день’!C23»)

    Хм. Только сейчас понял, что он выдает путь на …Desktop, хотя файл находится абсолютно в другой папке: C:UsersName1DropboxFolder
    Функция:

    Код
    =ЛЕВСИМВ(ЯЧЕЙКА("filename"); НАЙТИ("[";ЯЧЕЙКА("filename"))-1)

    выдает C:UsersName1Desktop

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    Формула =ЯЧЕЙКА(«filename») выдает путь именно к тому файлу, в котором используется и не ошибается :)

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Вроде всё проверил, что не так?
    P.S. Путь определяется верно, я с файлами запутался немного)

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    Все так, но ДВССЫЛ работает только с открытыми файлами

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Вот тут то вся и беда). Так как файл, который подбирает инфу из других файлов находится в дропбоксе, то путь постоянно меняется. + по завершению месяца переносится в отдельную папку. Использую ctrl+h и замену пути. Получается, автоматизировать данный процесс не получится.
    P.S. Можно было бы перейти на тот же one drive, однако папку дропбокс можно хранить в определенном каталоге на диске (поэтому на нескольких компах одинаковый путь), но не на всех)

    Изменено: Jonych14.01.2016 02:01:34

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Примерно понял, что делают эти функции и как работает, но у меня больше тысячи ячеек :P. Писать скрипт по каждой — неверный метод)

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    Ну тогда вариантов почти не остаётся. Если файл используется только вами и не предназначен для рассылки, то поинтересуйтесь надстройкой написанной Laurent Longre, в которой есть функция листа INDIRECT.EXT или надстройкой написанной Harlan Grove, где есть функция листа PULSE. Я их сам не пробовал, но когда-то рекомендовали как решение. Вполне возможно, что за давностью лет они и перестали работать в последних версиях Excel, но может имеет смысл попытать счастья. Удачи.

    добавлено: фунция PULSE, похоже, использует ADO, так что наверняка медленная.

    Изменено: KL15.01.2016 02:25:49

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Ок. Спасибо вам большущее за помощь, буду пробовать :)

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    #16

    15.01.2016 02:43:12

    Хотя, у меня только что появилась идея, как реализовать через VBA.

    Код
    Sub Путь()
    i = Application.ActiveWorkbook.Path
    Range("B1") = i
    End Sub

    А так как путь у нас постоянный: =’C:DropboxFolder[03.xlsm]Текущий день’!$AJ$23, за исключением всего, что написано до символа «[«, то можно далее добавить замену символов до «[» на то, что получается в B1 во всех ячейках. Реализуемо?
    02:45 Получается, вся проблема в выборке всех символов до «[«. Можно даже вручную проставить несколько диапазонов, чтобы не накосячить случайно.
    02:49 Если первый символ = [, Paste B1, else удалить, repeat. Что-то типа такого.
    03:47 Если вставлять путь через инпут бокс, то он отображается как ссылка именно. Полагаю, что замена символов до «[» решит проблему. Пора спать…)

    Изменено: Jonych15.01.2016 03:48:45

     

    The_Prist

    Пользователь

    Сообщений: 14181
    Регистрация: 15.09.2012

    Профессиональная разработка приложений для MS Office

    #17

    15.01.2016 09:57:01

    Цитата
    KL написал:
    =ЯЧЕЙКА(«filename») выдает путь именно к тому файлу, в котором используется и не ошибается

    Кирилл, что-то меня терзают смутные сомнения…Если не указать второй аргумент(адрес ячейки), то функция вернет путь до активного на момент пересчета файла, а не путь до файла с функцией. Т.е. корректней будет так:
    ЯЧЕЙКА(«filename»;A1)

    Jonych, я так до конца и не понял, что Вам надо. Возможно, какой-нибудь вариант на макросах из моей статьи подойдет:

    Как получить данные из закрытой книги?

    Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

     

    KL

    Пользователь

    Сообщений: 2186
    Регистрация: 01.01.2013

    The_Prist, согласен :)

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Если все-таки решу вопрос, то отпишусь) спасибо за помощь!)

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Все-таки не получилось). Перейти на one-drive с динамическими путями (в зависимости от пользователя компа) не получится. Остается Dropbox со стационарным путем C:DropboxПапкафайлы.xlsx

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    Накопал идею:

    http://forum.msexcel.ru/index.php?topic=1920.0

    . Там много всего, но смысл в том, чтобы сделать кнопку «обновить данные», и по нажатию в невидимом режиме открывается 31 файл, данные обновляются, файлы закрываются.  

     

    Hugo

    Пользователь

    Сообщений: 23249
    Регистрация: 22.12.2012

    #22

    02.02.2016 15:00:58

    Цитата
    Jonych написал:
    смысл в том, чтобы сделать кнопку «обновить данные»

    и как же тогда «Реализация без VBA»?

     

    The_Prist

    Пользователь

    Сообщений: 14181
    Регистрация: 15.09.2012

    Профессиональная разработка приложений для MS Office

    Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    #24

    02.02.2016 17:02:25

    Цитата
    Hugo написал: и как же тогда «Реализация без VBA»?

    Если других вариантов нет, пробуем такой)

     

    Jonych

    Пользователь

    Сообщений: 26
    Регистрация: 13.01.2016

    #25

    01.03.2016 01:03:30

    Заказал за 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
    
     

    vaspup88

    Пользователь

    Сообщений: 54
    Регистрация: 19.04.2019

    #26

    21.09.2019 15:26:34

    Здравствуйте! Помогите, я знаю. вам это будет легко :)
    имеется макрос

    Код
    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
    

    как вывести пусть файла в определенную ячейку?

    Изменено: vaspup8821.09.2019 16:07:05

     

    Юрий М

    Модератор

    Сообщений: 60570
    Регистрация: 14.09.2012

    Контакты см. в профиле

    vaspup88, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.

     

    Юрий М

    Модератор

    Сообщений: 60570
    Регистрация: 14.09.2012

    Контакты см. в профиле

    #28

    21.09.2019 15:51:07

    Код
    Sub Выбор_файла()
       Filename$ = GetFilePath()
       If Filename$ = "" Then Exit Sub
       MsgBox "Выбран файл: " & Filename$
       Range("A1") = Filename$ 'Добавлено
    End Sub
    
     

    vaspup88

    Пользователь

    Сообщений: 54
    Регистрация: 19.04.2019

    #29

    21.09.2019 16:07:50

    Цитата
    Юрий М написал:
    код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.

    сделал :) извиняюсь…спасибо огромное!

    Изменено: vaspup8821.09.2019 16:08:14

     

    vaspup88

    Пользователь

    Сообщений: 54
    Регистрация: 19.04.2019

    #30

    21.09.2019 18:59:52

    а как сократить весь путь до имени файла с расширением? причем с выводом в определенную ячейку :)

    Изменено: vaspup8821.09.2019 20:29:43

    Перейти к содержимому раздела

    Форумы CADUser

    Информационный портал для профессионалов в области САПР

    Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

    Дерево сообщений Активные темы Темы без ответов

    Страницы 1

    Чтобы отправить ответ, вы должны войти или зарегистрироваться

    #1 28 ноября 2008г. 20:19:34

    • kp
    • Восстановленный участник
    • На форуме с 17 марта 2005г.
    • Сообщений: 254
    • Спасибо: 0

    Тема: Как в VBA получить имя файла из строки полного пути к нему?

    Как в VBA получить имя файла из строки полного пути к нему?
    В Лиспе есть vl-filename-base, а как такое провернуть в VBA? Подскажите, PLS

    #2 Ответ от Vildar 28 ноября 2008г. 22:33:31

    • Vildar
    • Активный участник
    • Откуда: Саратов
    • На форуме с 15 августа 2008г.
    • Сообщений: 574
    • Спасибо: 11

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    А кто его знает шо такое vl-filename-base
    У нас :D через Doc.Name
    Ну а из строки с полным путем к фаулу, ессно через строковый функции, inStr(inStrRev), Mid, и т.д. Находишь позишн последнего слэша, и через Left получаешь строку после него.
    Поняно?

    #3 Ответ от LeonidSN 28 ноября 2008г. 22:56:15

    • LeonidSN
    • Активный участник
    • На форуме с 30 мая 2005г.
    • Сообщений: 1,480
    • Спасибо: 5

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    #4 Ответ от kp 1 декабря 2008г. 11:24:43

    • kp
    • Восстановленный участник
    • На форуме с 17 марта 2005г.
    • Сообщений: 254
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    LeonidSN, спасибо

    #5 Ответ от Михаил 1 декабря 2008г. 12:04:56

    • Михаил
    • Восстановленный участник
    • На форуме с 9 марта 2008г.
    • Сообщений: 55
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    Function FlExtractFileName(FileName As String) As String
    ' вытаскивает название файла с расширением, из полного имени файла, т.е из c:1.xxx получит 1.xxx
        Dim stpos As Long
        stpos = InStrRev(FileName, "")
        FlExtractFileName = Right$(FileName, Len(FileName) - stpos)
    End Function
    Function FlGetProjectName() As String
    ' узнать полное имя проекта
        Dim app As AcadApplication
        Set app = ThisDrawing.Application
        FlGetProjectName = app.VBE.ActiveVBProject.FileName
    End Function

    #6 Ответ от kp 3 декабря 2008г. 17:19:27

    • kp
    • Восстановленный участник
    • На форуме с 17 марта 2005г.
    • Сообщений: 254
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    > Михаил
    СПАСИБО!

    #7 Ответ от SmeL 10 декабря 2008г. 11:35:07

    • SmeL
    • SmeL
    • Активный участник
    • Откуда: Молдова
    • На форуме с 29 сентября 2005г.
    • Сообщений: 464
    • Спасибо: 1

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    > Михаил
    Код работает на 50%

    #8 Ответ от Boxa 10 декабря 2008г. 13:54:04

    • Boxa
    • Восстановленный участник
    • На форуме с 16 августа 2005г.
    • Сообщений: 60
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    Такой код всегда работает и всегда на 100%

    Sub asfff_01()
        Dim path_0 As String
        Dim temp As Variant
        Dim files_0 As String
            path_0 = "c:dhhhfjjjtur1.txt"
            temp = Split(path_0, "")
            files_0 = temp(UBound(temp))
    End Sub

    #9 Ответ от SmeL 10 декабря 2008г. 14:56:18

    • SmeL
    • SmeL
    • Активный участник
    • Откуда: Молдова
    • На форуме с 29 сентября 2005г.
    • Сообщений: 464
    • Спасибо: 1

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    > Boxa
    Код работает на 50%
    :) поверь мне :)

    #10 Ответ от Boxa 10 декабря 2008г. 18:58:15

    • Boxa
    • Восстановленный участник
    • На форуме с 16 августа 2005г.
    • Сообщений: 60
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    SmeL опиши пожалуйста случай в котором приведенный мной код дает осечку… мне действительно интересно, так как мне видится тут все логично: строка пути разбивается в массив, после чего берется последний элемент массива, значение которого это имя файла.

    #11 Ответ от SmeL 11 декабря 2008г. 10:49:25

    • SmeL
    • SmeL
    • Активный участник
    • Откуда: Молдова
    • На форуме с 29 сентября 2005г.
    • Сообщений: 464
    • Спасибо: 1

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    Данный путь коректный для Windows «c:dhhhfjjjtur/01.txt», извлеки из него имя файла

    #12 Ответ от Boxa 11 декабря 2008г. 13:12:30

    • Boxa
    • Восстановленный участник
    • На форуме с 16 августа 2005г.
    • Сообщений: 60
    • Спасибо: 0

    Re: Как в VBA получить имя файла из строки полного пути к нему?

    согласен, не извлечет.
    Хотя с другой стороны система при запросе не возвращает такой путь.

    Сообщения 12

    Тему читают: 1 гость

    Страницы 1

    Чтобы отправить ответ, вы должны войти или зарегистрироваться

    Скачать пример рабочей книги

    Загрузите образец книги

    Из этого туториала Вы узнаете, как получить путь и имя файла с помощью формулы в Excel.

    Получить путь и имя файла

    В Excel нет функции для получения пути и имени файла напрямую, но функция CELL вернет путь к файлу, имя и лист. Используя текстовые функции FIND, LEFT и SUBSTITUTE, мы можем изолировать путь и имя файла.

    1 = ПОДСТАВИТЬ (ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; B2), НАЙТИ («]», ЯЧЕЙКА («имя файла»; B2)) — 1), «[«, «»)

    Давайте рассмотрим формулу.

    Имя файла, путь и рабочий лист

    Мы используем функцию CELL, чтобы вернуть путь к файлу, имя и лист, введя «имя файла» в качестве типа информации.

    1 = ЯЧЕЙКА («имя файла»; B2)

    НАЙТИ положение имени файла

    Как показано выше, функция CELL возвращает путь к файлу, имя и рабочий лист. Нам не нужен рабочий лист или квадратные скобки, поэтому мы используем функцию НАЙТИ, чтобы определить позицию последнего символа (то есть того, который стоит перед «]») в имени файла.

    Удалить имя рабочего листа

    Когда у нас есть позиция последнего символа имени файла, мы используем функцию LEFT, чтобы удалить имя рабочего листа.

    ЗАМЕНА Функция

    Выше вы можете видеть, что между путем и именами файлов все еще есть открытая квадратная скобка. Используйте функцию ЗАМЕНА, чтобы заменить «[» пустой строкой.

    1 = ПОДСТАВИТЬ (D3; «[«; «»)

    Объединение этих шагов в единую формулу дает нам:

    1 = ПОДСТАВИТЬ (ЛЕВО (ЯЧЕЙКА («имя файла»; B2), НАЙТИ («]», ЯЧЕЙКА («имя файла»; B2)) — 1), «[«, «»)

    Получить только путь

    Возможно, вы захотите показать только путь без имени файла. Для этого мы можем остановиться на функции LEFT с небольшой настройкой. Заменить не нужно, так как не будет никаких символов в середине строки, которые нужно удалить. Чтобы вернуть только путь, мы находим позицию первого символа имени файла («[«), а не последнего, а имя пути — все слева.

    1 = ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; B2); НАЙТИ («[«; ЯЧЕЙКА («имя файла»; B2)) — 1)

    Вы поможете развитию сайта, поделившись страницей с друзьями

    Понравилась статья? Поделить с друзьями:

    А вот еще интересные статьи:

  • Excel получить имя столбца
  • Excel получить цвет ячейки в формуле
  • Excel последняя версия что нового
  • Excel получить имя листа формулой
  • Excel получить цвет ячеек

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии