[VBA execl] Añadir un botón de explorar

Resuelto
schont Mensajes publicados 33 Estado Miembro -  
 Gab -
¿Qué código debo usar para agregar un botón "Examinar" en un userform?
Me gustaría añadir un botón de comando que use la función examinar y cuando se seleccione el archivo deseado su ruta se muestre en un cuadro de texto que se encuentra en el mismo userform.
Es para enlazar una referencia a un archivo pdf.

Si alguien tiene alguna idea ...

Gracias
Configuración: Windows XP Internet Explorer 6.0 Excel 2003

4 respuestas

Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención   59
 
Hola schont,

Creo que esto es lo que buscas:

 Private Sub CommandButton1_Click() With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .Show UserForm1.TextBox1.Text = .SelectedItems(1) End With End Sub


Adapta los nombres de los controles a tu aplicación.

Saludos.
11
schont Mensajes publicados 33 Estado Miembro 10
 
Gracias, es exactamente lo que quería. Estaba atascado con esto:

Private Sub CommandButton3_Click()
FileToOpen = Application _
.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf", 1, "Rechercher...")
If FileToOpen = False Then
MsgBox "Operation annulée", vbExclamation
Exit Sub
End If
' falta algo?!
End Sub

Pequeña pregunta: ahora el camino del archivo se copia en mi TextBox11 y cuando hago clic en un botón "completar" la valor de mi TextBox se vuelve a copiar en una celda, el código es:

Sheets("Feuil1").Cells(Lg, "I").Value = UserForm1.TextBox11.Value

El camino del archivo se muestra bien pero no como enlace, lo cual es práctico para abrirlo con un solo clic.

¿Es una opción que hay que activar en Excel para que convierta una ruta en enlace (creo que Word lo hace solo cuando se escribe una dirección de Internet) o es VBA el que hay que usar?

En cualquier caso, ¡gracias y felicitaciones por la rapidez y la efectividad!
0
Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención   59 > schont Mensajes publicados 33 Estado Miembro
 
Solo debes añadir este código después de que el TextBox se haya rellenado:

ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=UserForm1.TextBox1.Text


Puedes reemplazar Selection por una dirección de celda fija.

Atentamente
0
schont Mensajes publicados 33 Estado Miembro 10 > Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención  
 
Gracias una vez más!
0
Gab
 
Gracias, chicos!
0
schont Mensajes publicados 33 Estado Miembro 10
 
Hola,

La función .GetOpenFilename no parece ofrecer ese tipo de opción.

Creo que, no obstante, se puede simplificar un poco el código:

Dim nom_fichier As String
nom_fichier = Application.GetOpenFilename
nom_fichier = Mid(nom_fichier, InStrRev(nom_fichier, "\" ) + 1, InStrRev(nom_fichier, ".") - InStrRev(nom_fichier, "\" ) - 1)
Range("a1") = nom_fichier

Cordiales,
2
Biorix
 
Gracias, ¡funciona de maravilla!
0
schont Mensajes publicados 33 Estado Miembro 10
 
Acabo de darme cuenta de que cuando haces clic en el botón Examinar y luego, en lugar de hacer clic en "Abrir", haces clic en "Cancelar", aparece un error "error de ejecución '5'" y se ofrece un depurador.
probé con
If FileToOpen = False Then MsgBox "Operation annulée", vbExclamation Exit Sub End If 


pero con eso incluso cuando haces clic en "Abrir" la caja de mensaje se abre y muestra el mensaje.

Gracias por ayudarme a resolver este problema
0
Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención   59
 
Buenas noches schont,

No entiendo la causa de este error, pero una solución simple y rápida es añadir una línea de manejo del error al inicio del procedimiento;
Private Sub CommandButton1_Click() On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .Show UserForm1.TextBox1.Text = .SelectedItems(1) End With End Sub

¡Así queda solucionado!

Atentamente
0
schont Mensajes publicados 33 Estado Miembro 10 > Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención  
 
Gracias
0
logical
 
Respuesta tardía pero que podría interesar a algunos, reemplaza la línea:
.Show
por
If .Show = 0 Then Exit Sub
0
Biorix
 
Hola, ¿es posible usar el botón examinar pero obtener solo el nombre del archivo sin la ruta completa ni la extensión .xlsx?

Es decir: "monfichier" en lugar de "C:\dossier\monfichier.xlsx"

Porque por ahora solo he podido hacer una maniobra complicada para aislar el nombre:

Dim fichier As String
Dim fichier1 As String
Dim fichier2 As String
Dim fichier3 As String
Dim nom As String

fichier1 = Range("a1").Value

For i = Len(fichier1) - 5 To 1 Step -1
fichier2 = Mid(fichier1, i, 1)
If fichier2 = "\" Then
GoTo nom_fichier
End If
Next i
nom_fichier: fichier3 = Mid(fichier1, i + 1)

fichier = Left(fichier3, Len(fichier3) - 5)
Range("a1") = fichier

Merci
0