variable una ruta para obtener nombre macro guardar escritorio código cualquier con como celda carpeta archivo abrir vba ms-access excel-vba ms-access-97

vba - una - obtener ruta de carpeta c#



Encuentre la parte del directorio(menos el nombre del archivo) de una ruta completa en el acceso 97 (8)

Por varias razones, estoy atrapado en Access 97 y necesito obtener solo la ruta de acceso de una ruta de acceso completa.

Por ejemplo, el nombre

c:/whatever dir/another dir/stuff.mdb

debe convertirse

c:/whatever dir/another dir/

Este sitio tiene algunas sugerencias sobre cómo hacerlo: http://www.ammara.com/access_image_faq/parse_path_filename.html

Pero parecen bastante horribles. Debe haber una mejor manera, ¿verdad?


Eso es todo. No hay una función mágica incorporada ...


left (currentdb.Name, instr (1, currentdb.Name, dir (currentdb.Name)) - 1)

La función Dir devolverá solo la parte del archivo de la ruta completa. Currentdb.Name se usa aquí, pero podría ser cualquier cadena de ruta completa.


Siempre usé el FileSystemObject para este tipo de cosas. Aquí hay una pequeña función de envoltura que utilicé. Asegúrese de hacer referencia al 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


Si solo necesita la ruta del MDB actualmente abierto en la IU de acceso, le sugiero que escriba una función que analice CurrentDB.Name y luego almacene el resultado en una variable estática dentro de la función. Algo como esto:

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

Esto tiene la ventaja de que solo recorre el nombre una vez.

Por supuesto, solo funciona con el archivo abierto en la interfaz de usuario.

Otra forma de escribir esto sería usar las funciones proporcionadas en el enlace dentro de la función anterior, por lo tanto:

Public Function CurrentPath() As String Static strPath As String If Len(strPath) = 0 Then strPath = FolderFromPath(CurrentDB.Name) End If CurrentPath = strPath End Function

Esto hace que la recuperación de la ruta actual sea muy eficiente mientras se utiliza el código que puede usarse para encontrar la ruta para cualquier nombre de archivo / ruta.


Esto parece funcionar Lo anterior no aparece en 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


Prueba esta función:

Function FolderPath(FilePath As String) As String ''-------------------------------------------------- ''Returns the folder path form the file path. ''Written by: Christos Samaras ''Date: 06/11/2013 ''-------------------------------------------------- Dim FileName As String With WorksheetFunction FileName = Mid(FilePath, .Find("*", .Substitute(FilePath, "/", "*", Len(FilePath) - _ Len(.Substitute(FilePath, "/", "")))) + 1, Len(FilePath)) End With FolderPath = Left(FilePath, Len(FilePath) - Len(FileName) - 1) End Function

Si no desea eliminar la última barra invertida "/" al final de la ruta de la carpeta, cambie la última línea con esto:

FolderPath = Left(FilePath, Len(FilePath) - Len(FileName))

Ejemplo:

FolderPath("C:/Users/Christos/Desktop/LAT Analysers Signal Correction/1/TP 14_03_2013_5.csv")

da:

C: / Users / Christos / Desktop / LAT Analyzers Corrección de señal / 1

o

C: / Users / Christos / Desktop / LAT Analizadores Corrección de señal / 1 /

en el segundo caso (tenga en cuenta que hay una barra invertida al final).

Espero que ayude...


Usa estos códigos y disfrútalo.

Public Function GetDirectoryName(ByVal source As String) As String() Dim fso, oFolder, oSubfolder, oFile, queue As Collection Set fso = CreateObject("Scripting.FileSystemObject") Set queue = New Collection Dim source_file() As String Dim i As Integer queue.Add fso.GetFolder(source) ''obviously replace Do While queue.Count > 0 Set oFolder = queue(1) queue.Remove 1 ''dequeue ''...insert any folder processing code here... For Each oSubfolder In oFolder.SubFolders queue.Add oSubfolder ''enqueue Next oSubfolder For Each oFile In oFolder.Files ''...insert any file processing code here... ''Debug.Print oFile i = i + 1 ReDim Preserve source_file(i) source_file(i) = oFile Next oFile Loop GetDirectoryName = source_file End Function

Y aquí puedes llamar a la función:

Sub test() Dim s For Each s In GetDirectoryName("C:/New folder") Debug.Print s Next End Sub


Puedes hacer algo simple como: Left(path, InStrRev(path, "/"))

Ejemplo:

Function GetDirectory(path) GetDirectory = Left(path, InStrRev(path, "/")) End Function