Come estrarre il nome del file dal percorso?

Come estrarre il nomefile myfile.pdf da C:\Documents\myfile.pdf in VBA?

Questo è preso da snippets.dzone.com :

 Function GetFilenameFromPath(ByVal strPath As String) As String ' Returns the rightmost characters of a string upto but not including the rightmost '\' ' eg '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 

Il modo migliore di lavorare con file e directory in VBA per Office 2000/2003 è utilizzare la libreria di scripting. Aggiungi un riferimento a Microsoft Scripting Runtime (Strumenti> Riferimenti nell’IDE).

Crea un object filesystem e fai tutte le operazioni usando quello.

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

FileSystemObject è fantastico. Offre molte funzionalità come ottenere cartelle speciali (documenti personali, ecc.), Creare, spostare, copiare, eliminare file e directory in modo orientato agli oggetti. Controlla.

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

restituirà il nome del file, ma solo se esiste.

Ho letto tutte le risposte e vorrei aggiungere un altro che penso vince a causa della sua semplicità. A differenza della risposta accettata, ciò non richiede la ricorsione. Inoltre non richiede il riferimento a un 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/ ha questo codice più altre funzioni per analizzare il percorso del file, l’estensione e persino il nome del file senza l’estensione.

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

Se vuoi una soluzione più robusta che ti dia sia il percorso della cartella completa che il nome file, eccoti:

 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 

O come sotto / funzione:

 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 

Si passa il primo parametro con il percorso completo del file e verrà impostato sul percorso della cartella mentre il secondo parametro verrà impostato sul nome del file.

Per ottenere il nome del file in una macro excel è:

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

Ecco una semplice soluzione VBA che ho scritto che funziona con Windows, Unix, Mac e percorsi URL.

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

Puoi testare l’output usando questo codice:

 '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 

Vedi anche: Wikipedia – Path (informatica)

L’approccio più semplice se si è certi che il file esista fisicamente sul disco:

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

Se non si è sicuri dell’esistenza del file o si desidera semplicemente estrarre il nome file da un determinato percorso, l’approccio più semplice è:

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

Non posso credere a quanto siano complicate alcune di queste risposte … (senza offesa!)

Ecco una funzione a linea singola che porterà a termine il lavoro:


** Estrai nome file da <code/> x: \ path \ filename : **”></p>
<pre> <code>Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,


** Estrai percorso da <code/> x: \ path \ filename : **”></p>
<pre> <code>Function getPath(pf)As String:getPath=Left(pf,InStrRev(pf,


Esempi:

esempi

Ecco una soluzione alternativa senza codice. Questo VBA funziona nella barra delle formule di Excel:

Per estrarre il nome del file:

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

Per estrarre il percorso del file:

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

Avevo bisogno del percorso, non del nome del file.

Quindi per estrarre il percorso del file nel codice:

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

Questo raccolto da Twiggy @ http://archive.atomicmpc.com.au e altri luoghi:

 '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 
 Dim nme As String = My.Computer.FileSystem.GetFileInfo(pathFicheiro).Name Dim dirc As String = My.Computer.FileSystem.GetFileInfo(nomeFicheiro).Directory