En este artículo, hemos creado un procedimiento que se utiliza para mostrar el cuadro de diálogo, que se utiliza para navegar a través de la carpeta para seleccionar la carpeta.

Este código se puede utilizar junto con otras macros donde se requiere la selección de carpeta en tiempo de ejecución.

SelectingFolder

Explicación lógica

En este artículo, hemos hecho referencia a dos funciones de la API para mostrar el cuadro de diálogo de la carpeta de navegación.

Cuando seleccionamos una carpeta en particular usando el navegador de carpetas, el cuadro de diálogo devuelve la ruta de la carpeta seleccionada.

Siga a continuación el código

Option Explicit

'Declaring user data type

'Used by the function GetFolderName

Private Type BROWSEINFO

hOwner As Long

pidlRoot As Long

pszDisplayName As String

lpszTitle As String

ulFlags As Long

lpfn As Long

lParam As Long

iImage As Long

End Type

'Declaring reference to API Function

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _

Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32.dll" _

Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function GetFolderName(Msg As String) As String

'Returns the name of the folder selected by the user

Dim bInfo As BROWSEINFO, path As String, r As Long

Dim X As Long, pos As Integer



bInfo.pidlRoot = 0

'Type of directory to return

bInfo.ulFlags = &H1

'Display the dialog

X = SHBrowseForFolder(bInfo)

'Parse the result

path = Space$(512)

'Calling API function

r = SHGetPathFromIDList(ByVal X, ByVal path)

'Code for deleting extra spaces in the end of folder name return

If r Then

pos = InStr(path, Chr(0))

GetFolderName = Left(path, pos - 1)

Else

GetFolderName = ""

End If

End Function

Sub TestGetFolderName()

Dim FolderName As String

'Calling function GetFolderName

FolderName = GetFolderName("Select a folder")

If FolderName = "" Then

MsgBox "You didn't select a folder."

Else

MsgBox "You selected this folder: " & FolderName

End If

End Sub

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]