Как извлечь имя файла из пути? - PullRequest
52 голосов
/ 16 ноября 2009

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

Ответы [ 16 ]

117 голосов
/ 18 ноября 2009

Лучший способ работы с файлами и каталогами в 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 великолепен. Он предлагает множество функций, таких как получение специальных папок (Мои документы и т. Д.), Создание, перемещение, копирование, удаление файлов и каталогов объектно-ориентированным способом. Проверьте это.

45 голосов
/ 22 ноября 2009
Dir("C:\Documents\myfile.pdf")

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

39 голосов
/ 16 ноября 2009

Это взято из 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
26 голосов
/ 05 октября 2013

Я прочитал все ответы, и я хотел бы добавить еще один, который, я думаю, выигрывает из-за его простоты. В отличие от принятого ответа это не требует рекурсии. Он также не требует ссылки на 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 / имеет этот код плюс другие функции для анализа пути к файлу, расширения и даже имя файла без расширения.

9 голосов
/ 08 февраля 2013
Dim sFilePath$, sFileName$
sFileName = Split(sFilePath, "\")(UBound(Split(sFilePath, "\")))
5 голосов
/ 25 апреля 2018

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

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


imagex:\path\filename:**">

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

imagex:\path\filename:**">

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

Примеры:

examples

4 голосов
/ 13 октября 2013

Вот простое решение 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

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

4 голосов
/ 04 декабря 2012

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

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

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

3 голосов
/ 23 марта 2017

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

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

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

fileName = Mid(filePath, InStrRev(filePath, "\") + 1)
3 голосов
/ 19 сентября 2012

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

filname = Mid(spth, InStrRev(spth, "\", Len(spth)) + 1, Len(spth))
MsgBox Mid(filname, 1, InStr(filname, ".") - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...