Подтвердить что ты не робот

Как извлечь имя файла из пути?

Как извлечь имя файла myfile.pdf из C:\Documents\myfile.pdf в VBA?

4b9b3361

Ответ 1

Это взято из snippets.dzone.com:

Function GetFilenameFromPath(ByVal strPath As String) As String
' Returns the rightmost characters of a string upto but not including the rightmost '\'
' e.g. 'c:\winnt\win.ini' returns 'win.ini'

    If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
        GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
    End If
End Function

Ответ 2

Лучший способ работы с файлами и каталогами в VBA для Office 2000/2003 - использовать библиотеку скриптов. Добавьте ссылку на Microsoft Scripting Runtime (Инструменты > Ссылки в среде IDE).

Создайте объект файловой системы и выполните все операции с этим.

Dim fso as new FileSystemObject
Dim fileName As String
fileName = fso.GetFileName("c:\any path\file.txt")

FileSystemObject отлично. Он предлагает множество функций, таких как получение специальных папок (Мои документы и т.д.), Создание, перемещение, копирование, удаление файлов и каталогов объектно-ориентированным способом. Проверьте это.

Ответ 3

Dir("C:\Documents\myfile.pdf")

вернет имя файла, но только если оно существует.

Ответ 4

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

Function FileNameFromPath(strFullPath As String) As String

    FileNameFromPath = Right(strFullPath, Len(strFullPath) - InStrRev(strFullPath, "\"))

End Function

http://vba-tutorial.com/parsing-a-file-string-into-path-filename-and-extension/ имеет этот код плюс другие функции для разбора пути файла, расширения и даже имени файла без расширения.

Ответ 5

Dim sFilePath$, sFileName$
sFileName = Split(sFilePath, "\")(UBound(Split(sFilePath, "\")))

Ответ 6

Я не могу поверить, насколько усложнены некоторые из этих ответов... (без обид!)

Вот однострочная функция, которая выполнит работу:


**Extract Filename from <code>x:\path\filename</code>:**

Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,"\")+1):End Function

**Extract Path from <code>x:\path\filename</code>:**

Function getPath(pf)As String:getPath=Left(pf,InStrRev(pf,"\")):End Function

Примеры:

examples

Ответ 7

Если вам требуется более надежное решение, которое даст вам полный путь к папке И имя файла, вот оно:

Dim strFileName As String, strFolderPath As String
Dim lngIndex As Long
Dim strPath() As String

strPath() = Split(OpenArgs, "\")   'Put the Parts of our path into an array
lngIndex = UBound(strPath)
strFileName = strPath(lngIndex)    'Get the File Name from our array
strPath(lngIndex) = ""             'Remove the File Name from our array
strFolderPath = Join(strPath, "\") 'Rebuild our path from our array

Или как суб/функция:

Private Sub SeparatePathAndFile(ByRef io_strFolderPath As String, ByRef o_strFileName As String)    
    Dim strPath() As String
    Dim lngIndex As Long

    strPath() = Split(io_strFolderPath, "\")  'Put the Parts of our path into an array
    lngIndex = UBound(strPath)
    o_strFileName = strPath(lngIndex)   'Get the File Name from our array
    strPath(lngIndex) = ""              'Remove the File Name from our array
    io_strFolderPath = Join(strPath, "\")     'Rebuild our path from our array  
End Sub

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

Ответ 8

Здесь простое решение VBA, которое я написал, работает с путями Windows, Unix, Mac и URL.

sFileName = Mid(Mid(sPath, InStrRev(sPath, "/") + 1), InStrRev(sPath, "\") + 1)

sFolderName = Left(sPath, Len(sPath) - Len(sFileName))

Вы можете проверить результат с помощью этого кода:

'Visual Basic for Applications 
http = "https://www.server.com/docs/Letter.txt"
unix = "/home/user/docs/Letter.txt"
dos = "C:\user\docs\Letter.txt"
win = "\\Server01\user\docs\Letter.txt"
blank = ""

sPath = unix 
sFileName = Mid(Mid(sPath, InStrRev(sPath, "/") + 1), InStrRev(sPath, "\") + 1)
sFolderName = Left(sPath, Len(sPath) - Len(sFileName))

Debug.print "Folder: " & sFolderName & " File: " & sFileName

Также см.: Википедия - Путь (вычисление)

Ответ 9

Чтобы получить имя файла в макросе excel:

filname = Mid(spth, InStrRev(spth, "\", Len(spth)) + 1, Len(spth))
MsgBox Mid(filname, 1, InStr(filname, ".") - 1)

Ответ 10

Самый простой подход, если вы уверены, что файл физически существует на диске:

Dim fileName, filePath As String
filePath = "C:\Documents\myfile.pdf"
fileName = Dir(filePath)

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

fileName = Mid(filePath, InStrRev(filePath, "\") + 1)

Ответ 11

Попробуйте использовать функцию split, чтобы получить имя файла из пути: Ссылка MSDN

Ответ 12

Здесь альтернативное решение без кода. Этот VBA работает в строке формул Excel:

Чтобы извлечь имя файла:

=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

Чтобы извлечь путь к файлу:

=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))

Ответ 13

Мне нужен был путь, а не имя файла.

Итак, чтобы извлечь путь к файлу в коде:

JustPath = Left(sFileP, Len(sFileP) - Len(Split(sFileP, "\")(UBound(Split(sFileP, "\"))))) 

Ответ 14

Это почерпнуто из Twiggy @http://archive.atomicmpc.com.au и других мест:

'since the file name and path were used several times in code
'variables were made public

Public FName As Variant, Filename As String, Path As String

Sub xxx()
   ...
   If Not GetFileName = 1 Then Exit Sub '
   ...
End Sub

Private Function GetFileName()
   GetFileName = 0 'used for error handling at call point in case user cancels
   FName = Application.GetOpenFilename("Ramp log file (*.txt), *.txt")
   If Not VarType(FName) = vbBoolean Then GetFileName = 1 'to assure selection was made
   Filename = Split(FName, "\")(UBound(Split(FName, "\"))) 'results in file name
   Path = Left(FName, InStrRev(FName, "\")) 'results in path
End Function

Ответ 15

Function file_name_only(file_path As String) As String

Dim temp As Variant

temp = Split(file_path, Application.PathSeparator)

file_name_only = temp(UBound(temp))

End Function
  1. здесь вы даете имя вашего файла в качестве ввода функции
  2. функция разбиения VBA разделяет путь на разные части, используя "\" в качестве разделителя пути, и сохраняет их в массиве с именем "temp"
  3. UBound() находит максимальный номер элемента массива и, наконец, присваивает результат функции "file_name_only"

Надеюсь, это будет полезно.

Ответ 16

Я использую эту функцию... VBA Функция:

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

Теперь введите

=FunctionGetFileName(A1) in youe required cell.

или вы можете использовать эти...

=MID(A1,FIND("*",SUBSTITUTE(A1,"\","*",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

Ответ 17

Dim nme As String = My.Computer.FileSystem.GetFileInfo(pathFicheiro).Name
Dim dirc As String = My.Computer.FileSystem.GetFileInfo(nomeFicheiro).Directory