[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

  1. 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
    1. 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
      1. 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
      2. 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
    2. Gab
       
      Gracias, chicos!
      0
  2. 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
    1. Biorix
       
      Gracias, ¡funciona de maravilla!
      0
  3. 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
    1. 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
      1. schont Mensajes publicados 33 Estado Miembro 10 > Papou93 Mensajes publicados 146 Fecha de registro   Estado Miembro Última intervención  
         
        Gracias
        0
    2. logical
       
      Respuesta tardía pero que podría interesar a algunos, reemplaza la línea:
      .Show
      por
      If .Show = 0 Then Exit Sub
      0
  4. 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