Listar archivos de carpeats vinculados

Buenos días tengo el siguiente código:
Option Explicit
"declaraciones 32-bit API
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public 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
Sub ListFiles()
Dim Msg As String
Dim Directory As String, f As String
Dim r As Long
Msg = "Seleccionar una localización que contenga los archivos que quiera poner en lista."
Directory = GetDirectory(Msg)
If Directory = "" Then Exit Sub
If Right(Directory, 1) <> "" Then Directory = Directory & ""
r = 1
" Insertar encabezados
Cells.ClearContents
Cells(r, 1) = "NombreArchivo"
Cells(r, 2) = "Tamaño"
Cells(r, 3) = "Fecha/Hora"
Range("A1:C1").Font.Bold = True
" Obtener el primer achivo
f = Dir(Directory, 7)
Do While f <> ""
r = r + 1
Cells(r, 1) = f
Cells(r, 2) = FileLen(Directory & f)
Cells(r, 3) = FileDateTime(Directory & f)
" Obtener el archivo siguiente
f = Dir
Loop
End Sub
Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, x As Long, pos As Integer
" Fichero Matriz = Escritorio
bInfo.pidlRoot = 0&
" Título en el diálogo
If IsMissing(Msg) Then
bInfo.lpszTitle = "Seleccionar una carpeta."
Else
bInfo.lpszTitle = Msg
End If
" Escriba el directorio para volver
bInfo.ulFlags = &H1
" Mostrar el diálogo
x = SHBrowseForFolder(bInfo)
" Analice el resultado
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
GetDirectory = Left(path, pos - 1)
Else
GetDirectory = ""
End If
End Function
Lo que hace es ponerme un listado de los archivos de una carpeta en especial
Lo que deseo es modificarla para que dicho listado sea con hipervínculos a tales archivos
¿Alguien podría ayudarme?

1 Respuesta

Respuesta
1
Por ejemplo, para crear vínculos a los libros de Excel listados habría que poner la instrucción
If LCase(Mid(f, Len(f) - 2)) = "xls" Then ActiveSheet.Hyperlinks.Add Anchor:=Cells(r, 1), Address:=Directory & f
En el bucle, por ejemplo después de las instrucciones
r = r + 1
Cells(r, 1) = f
Cells(r, 2) = FileLen(Directory & f)
Cells(r, 3) = FileDateTime(Directory & f)
Gracias por contestar, solo una duda, copie el código pero no hizo nada mi pregunta es ¡Sera porque, aunque si tengo archivos de excel (xls) también existen de acrobat, de word y otros, ¿Cómo puedo hacer para que cree el hipervínculo a cualquier tipo de archivo?
Nuevamente muchas Gracias
Jonathan
Pues quítale el If a la instrucción, algo como:
ActiveSheet.Hyperlinks.Add Anchor:=Cells(r, 1), Address:=Directory & f
Lo que no sé es si a Excel "le gustará" tener que crear vínculos a cualquier tipo de archivo, de ahí que en el código que puse tan sólo se crearan los vínculos a libros de Excel...
Muchas Gracias, probaré lo que me dices, finalizo y si necesitara algo más volveré a preguntar, ojalá me puedas ayudar, nuevamente gracias por tu atención y ayuda.
Jonathan

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas