PDA

Ver la Versión Completa : AYUDA con Visual Basic! crear "Botón Examinar" en Formularios de Access?



VaGoJr
08/08/2007, 11:28
Me toy volviendo loco para hacer un boton q funcione como el típico "Examinar" de todas las instalaciones de windows... es decir, q me se abra el explorador de windows y q pueda seleccionar un archivo... para poder llevar la cadena de texto (la Ruta del archivo) a un Cuadro de texto del formulario...

:confused::confused::confused:

muchas gracias!!

VaGoJr
09/08/2007, 09:57
Hola gente... como se nota que hay muchos de vacaciones... :rolleyes:

encontre la solucion: haz un Copy/Paste de esto dentro del Modulo del Formulario
(esta adaptado para que no tener q copiar nada al Modulo General)



Option Explicit
DefLng A-Z
'DECLARACIONES
' Este es el tipo que se pasa a la función del API SHBroseForFolder
Private Type BROWSEINFO
hWndOwner As Long 'ventana propietaria del dialogo de buscar carpetas
pidlRoot As Long 'puntero al ItemID de la carpeta raíz
pszDisplayName As String 'el nombre mostrado del objeto
lpszTitle As String 'el titulo de la ventana de dialogo
uFlags As Integer 'modificadores - ver abajo
lpfn As Long 'direccion de una funcion "callback" (opcional)
lParam As Long 'para el "callback", no utilizado
iImage As Long 'para el "callback", no utilizado
End Type
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" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As Long
Const BIF_RETURNONLYFSDIRS As Integer = 1 'Devolver sólo directorios del Sistema de Ficheros
'--------------------------------------------------------------------------------------
' Muestra un diálogo de buscar carpetas y devuelve el path a la carpeta escogida
' o una cadena vacía si la operación se canceló. Nótese que este procedimiento sólo
' devuelve carpetas del sistema de ficheros, no carpetas virtuales como Mi Ordenador o
' el Panel de Control
'--------------------------------------------------------------------------------------
Private Function BrowseForFolder(ByVal f_HWnd As Long, Optional lpTitle As Variant) As String
On Error Resume Next
Dim lpiidl As Long, lResult As Long
Dim lpbi As BROWSEINFO
Dim lpszBuf As String
Dim lpszNameSpace As String
lpszBuf = String$(255, Chr$(0))
lpszNameSpace = String$(255, Chr$(0))
'fijar los valores iniciales
With lpbi
.hWndOwner = f_HWnd 'el propietario del diálogo (para operación modal o no modal)
.pidlRoot = vbNullString 'comenzar a partir del Escritorio
.lpszTitle = lpTitle 'el texto por encima del árbol de carpetas (NO el "caption" del diálogo)
.pszDisplayName = lpszBuf 'contendrá al volver el nombre del objeto seleccionado
.uFlags = BIF_RETURNONLYFSDIRS 'devolver sólo carpetas del sistema de ficheros
.lpfn = vbNullString 'no hay función de "callback"
.lParam = 0& 'para el "callback", no utilizado
.iImage = 0& 'para el "callback", no utilizado
End With
' Mostrar el diálogo de buscar carpetas y obtener el puntero al ItemID asociado a la carpeta escogida
lpiidl = SHBrowseForFolder(lpbi)
' Si el usuario canceló el diálogo o ocurrió un error, devolver una cadena vacía
If lpiidl = 0 Then BrowseForFolder = "": Exit Function
' Obtener el path del objeto seleccionado a partir del itemID
lResult = SHGetPathFromIDList(lpiidl, lpszNameSpace)
If lResult = 1 Then 'la función devuelve 1 si tuvo éxito, 0 si hubo algún fallo
' Devolver el path a la carpeta, quitando los caracteres nulos extras
BrowseForFolder = Left$(lpszNameSpace, InStr(lpszNameSpace, Chr$(0)))
End If
End Function

'#################################################
'CREE UN BOTON Y UN CUADRO DE TEXTO en un formulario nuevo
'sustituya "Comando1" por el nombre del Boton
'sustituya "Texto0" por el nombre del Cuadro de texto
Sub Comando1_Click()
Dim ShellPath As String
ShellPath = BrowseForFolder(Me.Hwnd, "Escoja una carpeta")
If ShellPath <> "" Then
Me.Texto0 = Left(ShellPath, Len(ShellPath) - 1)
Else
MsgBox "¡Operación cancelada!"
End If
End Sub


Espero q os sirva.
Un saludo!

VaGoJr
09/08/2007, 12:31
He optado por una mejor solucion ;) ahora puedo decidir si seleccionar los directorios o directorios\archivos para conseguir su ruta! "!

la he encontrado en la web del guille, Es Un "CrAcK, jeje:
http://www.elguille.info/vb/ejemplos/browsefolder.htm

Modulo BAS = Modulo general (p.ej.)

lo que he hecho ha sido un copy/paste y luego he adaptao el codigo del guille a mis necesidades... como por ejemplo eliminar las lineas del codigo del Formulario para evitar tener q añadir Checkbox.

un saludete :rolleyes:
espero q os sirva!