Pour diverses raisons, je suis bloqué dans Access 97 et j'ai besoin d'obtenir uniquement la partie chemin d'accès d'un chemin d'accès complet.
Par exemple, le nom
c:\whatever dir\another dir\stuff.mdb
devraient devenir
c:\whatever dir\another dir\
Ce site a quelques suggestions sur la façon de le faire: http://www.ammara.com/access_image_faq/parse_path_filename.html
Mais ils semblent plutôt hideux. Il doit y avoir une meilleure façon, non?
C'est à peu près ça. Il n'y a pas de fonction magique intégrée ...
Vous pouvez faire quelque chose de simple comme: Left(path, InStrRev(path, "\"))
Exemple:
Function GetDirectory(path)
GetDirectory = Left(path, InStrRev(path, "\"))
End Function
J'ai toujours utilisé le FileSystemObject
pour ce genre de chose. Voici une petite fonction wrapper que j'ai utilisée. Assurez-vous de référencer le Microsoft Scripting Runtime
.
Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As New FileSystemObject
StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"
Exit Function
End Function
Cela semble fonctionner. Ce qui précède n'est pas dans Excel 2010.
Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As Object
Set filesystem = CreateObject("Scripting.FilesystemObject")
StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"
Exit Function
End Function
gauche (currentdb.Name, instr (1, currentdb.Name, dir (currentdb.Name)) - 1)
La fonction Dir renverra uniquement la partie fichier du chemin complet. Currentdb.Name est utilisé ici, mais il peut s'agir de n'importe quelle chaîne de chemin d'accès complète.
Si vous avez juste besoin du chemin de la MDB actuellement ouverte dans l'interface utilisateur Access, je suggère d'écrire une fonction qui analyse CurrentDB.Name puis stocke le résultat dans une variable statique à l'intérieur de la fonction. Quelque chose comme ça:
Public Function CurrentPath() As String
Dim strCurrentDBName As String
Static strPath As String
Dim i As Integer
If Len(strPath) = 0 Then
strCurrentDBName = CurrentDb.Name
For i = Len(strCurrentDBName) To 1 Step -1
If Mid(strCurrentDBName, i, 1) = "\" Then
strPath = Left(strCurrentDBName, i)
Exit For
End If
Next
End If
CurrentPath = strPath
End Function
Cela présente l'avantage de ne parcourir le nom qu'une seule fois.
Bien sûr, cela ne fonctionne qu'avec le fichier ouvert dans l'interface utilisateur.
Une autre façon d'écrire cela serait d'utiliser les fonctions fournies dans link à l'intérieur de la fonction ci-dessus, donc:
Public Function CurrentPath() As String
Static strPath As String
If Len(strPath) = 0 Then
strPath = FolderFromPath(CurrentDB.Name)
End If
CurrentPath = strPath
End Function
Cela rend la récupération du chemin actuel très efficace tout en utilisant du code qui peut être utilisé pour trouver le chemin pour n'importe quel nom de fichier/chemin.
Essayez cette fonction:
Fonction FolderPath (FilePath As String) As String '------------------------------ -------------------- 'Renvoie le chemin du dossier à partir du chemin du fichier. ' Écrit par: Christos Samaras 'Date: 06/11/2013 ' ------------------------------ -------------------- Dim FileName As String Avec WorksheetFunction FileName = Mid (FilePath, .Find ("*", .Substitute (FilePath, "\", "*", Len (FilePath) - _ Len (.Substitute (FilePath, "\", ") ")))) + 1, Len (FilePath)) Terminer par FolderPath = Left (FilePath, Len (FilePath) - Len (FileName) - 1) Fin de fonction
Si vous ne souhaitez pas supprimer la dernière barre oblique inverse "\" à la fin du chemin d'accès au dossier, modifiez la dernière ligne avec ceci:
FolderPath = Left (FilePath, Len (FilePath) - Len (FileName))
Exemple:
FolderPath("C:\Users\Christos\Desktop\LAT Analysers Signal Correction\1\TP 14_03_2013_5.csv")
donne:
C:\Users\Christos\Desktop\LAT Analyzers Signal Correction\1
ou
C:\Users\Christos\Desktop\LAT Analyzers Signal Correction\1 \
dans le second cas (notez qu'il y a une barre oblique inversée à la fin).
J'espère que ça aide ...
vFilename = "C:\Informes\Indicadores\Program\Ind_Cont_PRv.txt"
vDirFile = Remplacer (vFilename, Dir (vFileName, vbDirectory), "")
'Résultat = C:\Informes\Indicadores_Contraloria\Programa\Versiones anteriores \