Extraer nombre del archivo de una ruta

Saludos, necesito extraer el nombre de un archivo cuando sea seleccionado de una ruta y pasarlo a un textbox.
El asunto es el siguiente, tengo un botón y un caja de texto, donde deseo que al presionar el botón se habrá el dialogo del explorador de windows, y luego que yo elija la carpeta que este por defecto seleccione un archivo y ya al seleccionar se extraiga el nombre y aparezca en la caja de texto.
Poseo este código que hace algo parecido, pero su función es abrir un archivo y lo que necesito es que cuando seleccione el archivo pase el nombre al textbox.
Sub OpenSingleFile()
Dim Filter As String, Title As String
Dim FilterIndex As Integer
Dim Filename As Variant
' Filtro de archivos
Filter = "Archivos PDF (*.pdf),*.pdf," & _
        "Archivos JPG (*.jpg),*.jpg," & _
        "Archivos de Excel 2007 (*.xlsx),*.xlsx," & _
        "Archivos de Excel 97-2000 (*.xls),*.xls," & _
        "Archivos de Texto (*.txt),*.txt," & _
        "Todos los archivos (*.*),*.*"
'   Tipo de Archivo por defecto *.*
FilterIndex = 1
' Dialogo a mostrar
Title = "Seleccione el archivo a abrir"
' Seleccion del disco por defecto
ChDrive ("I")
ChDir ("I:\")
With Application
    ' Muestra el archivo a seleccionar
    Filename = .GetOpenFilename(Filter, FilterIndex, Title)
    ' Resetea el disco por defecto
    ChDrive (Left(.DefaultFilePath, 1))
    ChDir (.DefaultFilePath)
End With
' Salir o Cancelar
If Filename = False Then
    MsgBox "No se seleccionó ningun archivo."
    Exit Sub
End If
' Abrir arcihvo
Workbooks.Open Filename
MsgBox Filename, vbInformation, "File Opened" ' Esto puede ser Borrado
End Sub

1 Respuesta

Respuesta
Solo necesitas reemplazar la línea Workbooks. Open ... por la siguiente que moverá el nombre de la selección a tu caja de texto:
Textbox1 = Filename  
y quita también la línea del mensaje : Msgbox .......
Gracias por responder, hice eso mismo anteriormente pero no me pasa el valor al textbox
El textbox lo tengo así
En el userform tengo este botón para llamar al código que esta en el modulo.
Private Sub Examinar1_Click()
Call OpenSingleFile
End Sub
Private Sub TextBox1_Change()
Textbox1 = Filename
End Sub
Y aca esta el codigo del modulo
Sub OpenSingleFile()
Dim Filter As String, Title As String
Dim FilterIndex As Integer
Dim Filename As Variant
' Filtro de archivos
Filter = "Archivos PDF (*.pdf),*.pdf," & _
        "Archivos JPG (*.jpg),*.jpg," & _
        "Archivos de Excel 2007 (*.xlsx),*.xlsx," & _
        "Archivos de Excel 97-2000 (*.xls),*.xls," & _
        "Archivos de Texto (*.txt),*.txt," & _
        "Todos los archivos (*.*),*.*"
'   Tipo de Archivo por defecto *.*
FilterIndex = 1
' Dialogo a mostrar
Title = "Seleccione el archivo a abrir"
' Seleccion del disco por defecto
ChDrive ("I")
ChDir ("I:\")
With Application
    ' Muestra el archivo a seleccionar
    Filename = .GetOpenFilename(Filter, FilterIndex, Title)
    ' Resetea el disco por defecto
    ChDrive (Left(.DefaultFilePath, 1))
    ChDir (.DefaultFilePath)
End With
' Salir o Cancelar
If Filename = False Then
    MsgBox "No se seleccionó ningun archivo."
    Exit Sub
End If
End Sub
Si la variable se genera en un módulo aparte deberás declararla como pública, para poder compartirla:
Public Filename as String
Sub OpenSingleFile()
Dim Filter As String, Title As String
Dim FilterIndex As Integer
'Dim Filename As Variant 'quitarla de aquí
'sigue el resto
Ok el único problema es que si quito esa parte estaría dejando de declarar una variable y afectaría esta part:
Filename = .GetOpenFilename(Filter, FilterIndex, Title)
y si dentro del modulo hago esto tambien me faltaria declarar una variable.
f Filename = False Then
    MsgBox "No se seleccionó ningun archivo."
    Exit Sub
End If
textbox1 = filename
End Sub
No, mi estimado... pruébala primero y verás que no es así:
No estás dejando de declarar la variable, sino que la estás declarando de modo público por eso va afuera. De este modo la declaras no solo para este Sub sino para todos los del proyecto, incluyendo Userforms.
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas