martes, 8 de octubre de 2013

VBA: el método .GetOpenFilename para seleccionar un fichero.

Hace ya algunos años aprendimos la manera de seleccionar una carpeta o directorio empleando en nuestras macros el Explorador de Windows (ver).
Hoy iremos un paso más lejos y no nos quedaremos en la carpeta, si no que seleccionaremos un fichero concreto, con su ruta completa (nombre incluido). Para ello emplearemos el método .GetOpenFilename, lo que no mostrará el cuadro de diálogo estándar Abrir, obteniendo el nombre de archivo que seleccionemos, pero lo más importante, sin que en realidad se abra ningún archivo!!!... lo que será cómodo para conseguir rutas completas.


En el ejemplo que propongo, conseguir dicha ruta mediante la selección directa en la ventana Abrir, y servirá precisamente para esto. En el código siguiente he modificado el Título de la ventana, además de aplicar un filtro de posibles tipos de ficheros a mostrar, dejando sólo visibles los ficheros .xlsx.

Insertamos un módulo en nuestro Proyecto de VB en el editor de VB, y en él la macro siguiente:

Sub SeleccionFichero()
'identificamos el fichero y su ruta para importarlo
Dim RutaArchivo As String

'controlamos algún posible error.
On Error Resume Next
'damos valor a la variable Filename
'además hemos cambiado el Título que aparecerá en la ventana diálogo
'y forzamos para que sólo abra ficheros de Excel (extensión .xlsx)
RutaArchivo = Application.GetOpenFilename(Title:="Prueba selección ficheros Excelforo", _
                            filefilter:="Excel files (*.xlsx), *.xlsx")

'si hemos seleccionado algún archivo muestra un cuadro mensaje
If Not RutaArchivo = "False" Then
    MsgBox RutaArchivo
End If

'con el método .Open abrimos el fichero seleccionado
'o cualquier otra acción que requiera la ruta de un fichero
Workbooks.Open FileName:=RutaArchivo
End Sub



Al ejecutar nuestra macro veremos la siguiente ventana:

VBA: el método .GetOpenFilename para seleccionar un fichero.


Tras seleccionar un fichero cualquiera, se mostrará un Cuadro de mensaje de texto con la ruta y nombre completo del archivo seleccionado, y en mi caso, posteriormente se abrirá dicho archivo (ya que lo he forzado con Workbooks.Open).

VBA: el método .GetOpenFilename para seleccionar un fichero.

117 comentarios:

  1. Como hago para cerrar el archivo seleccionado

    ResponderEliminar
    Respuestas
    1. hola Bayron, que tal estás?
      un gusto saludarte igualmente.

      para cerrar el fichero puedes emplear el método .Close del Workbooks

      Saludos cordiales

      Eliminar
  2. Buenos días,

    hay alguna forma de meterle la ruta de la carpeta para buscar por defecto ?

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Josém
      sí, podrías añadir en la fila 04 del código más arriba:
      MyPath = "E:\excelforo"
      ChDrive MyPath
      ChDir MyPath

      Saludos

      Eliminar
  3. Hola señor Excelforo, puedes ayudarme con lo siguiente tengo este código que cierra el libro activo
    ActiveWorkbook.Close False
    pero como hago para que tambien me cierre el directorio del libro activo,

    gracias por su ayuda.

    ResponderEliminar
    Respuestas
    1. Hola!
      no entiendo a qué te refieres con cerrar el 'directorio del libro activo'??.. te refieres a cerrar el explorador de Windows?
      Saludos

      Eliminar
  4. hola Ismael seria cerrar la carpeta que se encuentra abierta del libro activo.

    ResponderEliminar
    Respuestas
    1. ???
      cómo se cierra una carpeta en el explorador de Windows??

      Eliminar
  5. Que tal, tengo una duda espero me puedas ayudar. Para seleccionar mas de un archivo es con MultiSelect:=True, como le hago para que al momento de seleccionar dos o mas archivos asi mismo me los muestre en el MsgBox. Gracias

    ResponderEliminar
    Respuestas
    1. Hola José Carlos,
      intentaré subir una explicación al blog en cuanto pueda...
      Saludos

      Eliminar
  6. hola excelforo:
    yo necesito encontrar ficheros en un directorio del explorador del tipo XML, pero que empiecen empiezan por un texto.
    Por ejemplo todos los pp*.xml que haya en una ruta determinada
    No se si esto es posible
    Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola,
      parece bastante complejo a priori, ya que sólo es configurable la extensión o tipo de fichero a buscar...
      Buscaré alguna posible solución alternativa.
      Un saludo

      Eliminar
  7. Hola Ismael
    Puedo obtener el nombre del solo archivo sin la ruta para pegarlo en un TextBox

    ResponderEliminar
    Respuestas
    1. Hola Jhon,
      con este método podrías empleando la función Split con el separador \.. quedándote con el último elemento de la Array resultante.

      Espero te oriente.
      Slds

      Eliminar
    2. Hola Ismael no no creo que sirva ya estube indagando y no. Es que lo que quiero es con la funcion get.openfilemane he sacado la ruta de unas fotografias que quiero agregar. pero como quiero cambiar de carpeta osea de una memoria a el disco duro, necesito estraer el nombre del archivo para realizar esa accion. jejeje Tienes algun metodo Mejor? Gracias

      Eliminar
    3. Igual no has buscado en la dirección correcta ;-)
      Mira:
      Sub SeleccionFichero()
      Dim RutaArchivo As String

      On Error Resume Next
      RutaArchivo = Application.GetOpenFilename(Title:="Prueba selección ficheros Excelforo", _
      filefilter:="Excel files (*.xlsx), *.xlsx")

      MatrizNombre = Split(RutaArchivo, "\")

      If Not RutaArchivo = "False" Then
      MsgBox MatrizNombre(UBound(MatrizNombre))
      End If

      End Sub

      No parece demasiado complejo....
      Saludos

      Eliminar
    4. Jjejeje Si Señor. Gracias Ismael
      Saludos

      Eliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Hola Ismael
    Como puedo recoger el nombre de un pdf que esta abierto (se ha abierto antes para comprobar que este pdf esta o no firmado) y llevarlo a una variable, para luego insertarlo en una fila del libro activo.
    Muchas Gracias
    Francis

    ResponderEliminar
    Respuestas
    1. Hola, a priori es bastante complejo.. ya que abría que emplear API's para recorrer las ventanas abiertas en Windows para detectar si existe un pdf, para luego intentar extraer su ruta...

      Diría que lo más sencillo es abrir con el código del ejemplo el pdf, así consigues guardar como variable su ruta, para luego hacer con ella lo que quieras...

      Intentaré subir, en cuanto me sea posible, una explicación de este tema.
      Saludos

      Eliminar
    2. Gracias por la respuesta tan rápida
      Intentare seguir tu consejo y esperare la explicación a este tema ya que tengo algún problema con la apertura de los .pdf que creo se debe a no referenciarlos bien o a que falte alguna librería en excel 2007.
      Gracias de nuevo
      Un saludo
      Francis

      Eliminar
  11. Hola Ismael,
    Y se puede rastrear el archivo excel? es decir que la ruta sea dinámica, sin importar a dónde se mueva el archivo lo ubique y logre abrirlo únicamente con el código?

    ResponderEliminar
    Respuestas
    1. Hola Yuri,
      piensa que esto es un Explorador, eres tu manualmente quien realiza la búsqueda.
      Sí es posible conocer la ruta de cualquier fichero ya abierto, pero primero se debe localizar de alguna manera...

      Slds

      Eliminar
  12. Hola, muy buenas tarde, yo no soy programador pero tu macro me esta ayudando mucho en un poryecto que estoy haciendo.

    Tengo una duda, ya que seleccionas el archivo, como puedes hacer para que ese archivo de texto quede importando dentro de la hoja de excel.

    Lo que hice yo fue hacer un macro para importar archivos, cambie el nombre y la ruta del archivo de dicho macro por RutaArchivo (que se supone es el que se selecciono antes).

    Con esto si logro que lo importe pero lo hace abriendo otro Arcchivo de excel. Y necesitaria que fuera en la misma hoja donde corro el macro.

    Espero que me puedas ayudar, por lo mientras colocare aqui el codigo completo como me quedo usando el tuyo y el del macro grabado

    Sub getopen()
    '
    ' getopen Macro
    '
    '
    'identificamos el fichero y su ruta para importarlo
    Dim RutaArchivo As String

    'controlamos algún posible error.
    On Error Resume Next
    'damos valor a la variable Filename
    'además hemos cambiado el Título que aparecerá en la ventana diálogo
    'y forzamos para que sólo abra ficheros de Excel (extensión .xlsx)
    RutaArchivo = Application.GetOpenFilename(Title:="Prueba selección ficheros Excelforo")

    'si hemos seleccionado algún archivo muestra un cuadro mensaje
    If Not RutaArchivo = "False" Then
    MsgBox RutaArchivo
    End If
    'con el método .Open abrimos el fichero seleccionado
    'o cualquier otra acción que requiera la ruta de un fichero
    Workbooks.Open Filename:=RutaArchivo
    With ActiveSheet.QueryTables.Add(Connection:=RutaArchivo _
    , Destination:=Range("$H$7"))
    .CommandType = 0
    .Name = _
    "RutaArchivo"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    End Sub

    ResponderEliminar
    Respuestas
    1. Hola,
      para importar un txt (de texto) a una hoja existente de Excel, podrías realizar la importación y luego en el mismo proceso copiar y pegar de ese libro abierto al destino final...

      Subiré una explicación del asunto en cuanto pueda.
      Saludos

      Eliminar
    2. Se pudo avanzar sobre este pedido de ayuda?

      Slds

      Eliminar
    3. Hola, que tal...
      está en mi lista :(

      De todas formas la idea es la que se comentó
      Realizar la importación, tratarla como temporal (esto es, luego borrarlo), para copiar y pegar el que se abra en el destino final

      Saludos

      Eliminar
  13. Hola Ismael una pregunta ¿Y si quiero cargar una fotografia como hipervinculo? y despues de que se carge al textbox quisiera visualizarla con un boton.. Espero puedas ayudarme, saludos.

    ResponderEliminar
  14. Hola Ismael, Gracias por tu trabajo, me esta ayudando con un proyecto para correr una macros. Solo tengo dos detalles y quisiera que me apoyaras

    1) Que de cancelar la selección del archivo en vez de false diga Cancelado o el texto que le quiera colocar.
    2) Y que si cancelo la selección del archivo no siga corriendo la macros.

    Sub SeleccionarArchivo()
    Dim RutaArchivo As String
    On Error Resume Next
    RutaArchivo = Application.GetOpenFilename(Title:="Seleccionar Archivo")
    If Not RutaArchivo = "False" Then
    MsgBox RutaArchivo
    End If
    Workbooks.Open FileName:=RutaArchivo
    End Sub

    ResponderEliminar
    Respuestas
    1. Hola Jore
      prueba con:
      Sub SeleccionarArchivo()
      Dim RutaArchivo As String
      On Error Resume Next
      RutaArchivo = Application.GetOpenFilename(Title:="Seleccionar Archivo")
      If Not RutaArchivo = "Falso" Then
      MsgBox RutaArchivo
      Else
      MsgBox "cancelado"
      Exit Sub

      End If
      Workbooks.Open Filename:=RutaArchivo
      End Sub

      Saludos

      Eliminar
  15. se puede usar este método para seleccionar un archivo *.* para moverlo a una ruta especifica.

    espero que me puedas comentar

    ResponderEliminar
    Respuestas
    1. Hola,
      echa un vistazo a este post
      http://excelforo.blogspot.com.es/2015/09/vba-el-metodo-movefolder-o-como-cambiar.html

      Quizá te de una pista.

      Lee también espeficicamente este otro post:
      http://stackoverflow.com/questions/14504372/moving-files-from-one-folder-to-another

      Saludos

      Eliminar
  16. Hola cuando se abre el display para elegir el archivo, lo que hago es cancelar porque me equivoque al abrir... inmediatamente se cierra el todo el libro. Por qué pasa eso?

    ResponderEliminar
    Respuestas
    1. Hola Frank,
      he replicado tu caso sobre el código del post y, en mi caso, no ocurre tal cosa...
      ¿has añadido alguna línea más?
      Saludos

      Eliminar
  17. Buenos dias Ismael, excelente informacion. quisiera me pudieras colaborar con algo, deseo mediante un boton seleccionar un archivo y mediante otro boton seleccionar una ruta especifica para guardar el archivo antes seleccionado.

    ResponderEliminar
    Respuestas
    1. Hola Jorge,
      bueno la idea sería seguir los pasos siguientes para asignar la macro descrita en este post (arriba) a un botón:
      http://excelforo.blogspot.com.es/2009/09/boton-con-macro-en-excel-2007.html

      Para guardar en libro en la ruta bastaría una macro tipo:
      Thisworkbook.saveas filename:="ruta completa"

      en ese caso "ruta completa" sería una variable.
      Esto es, podría ser la misma macro que la de arriba en el post, pero cambiando la última linea:
      Workbooks.Open FileName:=RutaArchivo

      por
      Thisworkbook.saveas filename:=RutaArchivo

      Lo que no tengo claro es que te aportarán estos 'botones' distintos a los estándar de 'Abrir' y 'Guardar Como' ya existentes en el estándar de la aplicación Excel.

      Slds

      Eliminar
  18. hola Ismael, una consulta yo necesito poder seleccionar una carpeta para luego copiar en ella un archivo. Es decir que yo pueda decidir donde deseo copiar el archivo.

    ResponderEliminar
  19. Muy interesante...gracias por la información.

    Elvis Ramos

    ResponderEliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Hola Ismael, muchas gracias por compartir tu conocimiento.
    Yo tengo una duda que tal vez sea muy básica o tal vez no sea posible.

    Tengo la curiosidad de hacer que el cuadro de dialogo que aparece con getopenfilename, aparezca en la pantalla centrado o en algún posición que yo indique.
    Es posible ?
    Saludos y gracias de antemno

    ResponderEliminar
    Respuestas
    1. Hola,
      en realidad esta es una ventana de Windows, asi que en teoría sí es posible trabajar sobre ella...
      Supongo existirá alguna API para Windows con la que trabajar desde Excel; yo nunca lo he intentado y desconozco cuál sería...

      Un saludo y suerte

      Eliminar
    2. Muchas gracias por tu pronta respuesta, sinceramente pensé que iban a pasar algunos días antes de recibir alguna respuesta(algunas veces nunca llega). Te agradezco mucho tu respuesta, aunque con las instrucciones que ofrece el propio Excel no es posible, esto me deja por el momento tranquilo y puedo seguir avanzando en el aprendizaje.
      Una cosa más, tengo una duda mas que me salió y tal vez la respuesta sea algo por el estilo. de cualquier manera te comento la inquietud que tengo, es con la función dir y con la manera de buscar un archivo y determinar si existe o no. la sintaxis de la instrucción dir es: dir pathname, atributos. Es posible hacer el dir aplicado a toda la unidad c?
      Es decir, tal vez tenga la necesidad de buscar x archivo pero no se en que carpeta se encuentre, asi que pensé que algo así funcionaria: dir("c:nombrearchivo") probe con un archivo que de antemano se que existe y no funciona, me devuelve una cadena vacia.
      Muchas gracias nuevamente.

      Eliminar
    3. ;-)
      la función de VBA Dir 'busca' fichero o carpeta en una ruta concreta, esto es, no actúa como el buscador de Windows
      Slds

      Eliminar
    4. Gracias Ismael, soy a veces necio y con esta opinión viniendo de alguien que me lleva muchísimo camino me deja tranquilo para no seguir perdiendo tiempo y seguir avanzando.
      Saludos desde México y seguire viendo tus videos y blog.

      Eliminar
    5. Gracias a tí...
      de todas formas, por desgracia yo no lo sé todo (ojalá estuviera a un 10% del potencial del VBA para Excel)... quizá algú otro lector te pueda dar más claves
      ;-)
      Un saludo

      Eliminar
  22. Disculpe Ismael!!
    Desde Excel puedo lanzar, arrancar, correr un archivo de lotes???? que este en una ruta especifica?

    ResponderEliminar
    Respuestas
    1. Hola Olegario,
      en principio sí es posible abrir o lanzar cualquier tipo de archivo (nunca probé un archivo de lote).
      Esto te puede servir:
      http://excelforo.blogspot.com.es/2014/01/vba-shellexecute-o-como-abrir-desde.html

      Un saludo

      Eliminar
  23. Hola Ismael:
    Quisiera abrir un archivo XML con tu macros, que se abra el archivo XML en una nueva hoja de cálculo, que seleccione una celda de esa hoja de cálculo y copie esa celda a otra celda de otra hoja de cálculo. Podrías ayudarme con el pedido, por favor?

    ResponderEliminar
  24. Una consulta adicional: hay manera de insertar/cargar una página web en una hoja de cálculo? si es factible, cómo lo inserto. Gracias nuevamente.

    ResponderEliminar
  25. Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Hola Ariana,
      mejor lee las Normas de Uso del blog.
      Cualquier duda concreta, con gusto intentaré ayudarte.
      Saludos

      Eliminar
    3. Por favor, sólo resuelve esta pequeña macro para grabar el contenido de una celda a un archivo de texto.

      Set rng = Application.InputBox("Selecciona el rango a guardar:", Type:=8)
      If rng Is Nothing Then Exit Sub ---->Abre cuadro para seleccionar cualquier celda en cualquier hoja (Hasta ahí bien).

      Workbooks.Add xlWBATWorksheet -
      rng.Copy: [a1].PasteSpecial xlPasteValuesAndNumberFormats
      Print rng ---> (NO copia el dato seleccionado en un arhivo de texto sino a una celda de otra hoja).

      Gracias de antemano por la ayuda.

      Eliminar
    4. Hola,
      para guardar datos desde Excel a un fichero txt:

      Sub Excel_Txt()
      Dim Ruta As String, Fichero As String
      Ruta = ThisWorkbook.Path & "\"
      Fichero = "z.txt"
      Dim WB As Workbook, nWB As Workbook
      Set WB = ThisWorkbook
      Set nWB = Workbooks.Add
      WB.ActiveSheet.UsedRange.Copy nWB.Sheets("Hoja1").Range("A1")
      With nWB
      Application.DisplayAlerts = False
      .SaveAs Filename:=Ruta & Fichero, FileFormat:=xlText
      .Close True
      Application.DisplayAlerts = True
      End With
      WB.Save

      End Sub

      Espero te oriente
      Saludos

      Eliminar
    5. Gracias por la ayuda, Ismael. Si no fuera tanto pedir, pudiera hacerse escogiendo manualmente cualquier celda de cualquier hoja y exportarla a un archivo de texto de acuerdo a la macro que mostré arriba? Gracias nuevamente.

      Eliminar
    6. Entiendo te refieres copiar y pegar el valor a un fichero txt ya existente, con otros datos...
      Trataré de subir una explicación al blog en cuanto me sea posible.
      Un saludo

      Eliminar
    7. No a un archivo existente. Debe crearse un archivo de texto por cada celda, crearlo en una carpeta específica y ponerle un nombre (el nombre debe ser puesto manualmente).

      Eliminar
    8. en ese caso te vale la macro que te adjuntaba dos comentarios más arrriba..
      solo cambia las variables Ruta y Fichero
      y
      WB.ActiveSheet.UsedRange.Copy nWB.Sheets("Hoja1").Range("A1")
      por la celda que quieras trasladar:
      WB.ActiveSheet.range("B1").Copy WB.Sheets("Hoja1").Range("A1")

      asi copiaras la celda B1 en un nuevo fichero de texto

      Saludos

      Eliminar
    9. Este comentario ha sido eliminado por el autor.

      Eliminar
    10. Gracias Ismael. Como último pedido: Hay forma de hacer que esa macro, que irá en un botón, se ejecute, te genere un cuadro de consulta indicando: "Seleccione la celda a Grabar", se escoge con el mouse cualquier celda de cualquier hoja y se da click en Aceptar para que lo grabe como archivo de texto? Gracia por el gran aporte y tiempo. Por otro lado, probé tu macro y lo que hace es cortar la celda y no la copia al archivo de texto.

      Eliminar
    11. Hola Ariana,
      para seleccionar la celda incluye una función
      application.inputbox
      empléalo como variable para poder usarla posteriormente

      ¿? no puede ser que corte ya que se está empleando el método .copy (y no el .cut):
      WB.ActiveSheet.range("B1").Copy WB.Sheets("Hoja1").Range("A1")

      Saludos

      Eliminar
    12. Pero, entonces, ya no si trabajo con application.inputbox, ya no tendría sentido la línea: WB.ActiveSheet.range("B1").Copy WB.Sheets("Hoja1").Range("A1").

      Entonces, quedaría así?

      Sub Excel_Txt()
      Dim Ruta As String, Fichero As String
      Ruta = ThisWorkbook.Path & "\"
      Fichero = "z.txt"
      Dim WB As Workbook, nWB As Workbook
      Set WB = ThisWorkbook
      Set nWB = Workbooks.Add
      Set rng = Application.InputBox("Selecciona el rango a guardar:", Type:=8)
      If rng Is Nothing Then Exit Sub
      WB.ActiveSheet.UsedRange.Copy 'nWB.Sheets("Hoja1").Range("A1")
      'With nWB
      Application.DisplayAlerts = False
      .SaveAs Filename:=Ruta & Fichero, FileFormat:=xlText
      .Close True
      Application.DisplayAlerts = True
      End With
      WB.Save

      End Sub

      Eliminar
    13. Hola
      la línea
      WB.ActiveSheet.UsedRange.Copy 'nWB.Sheets("Hoja1").Range("A1")
      por
      rng.Copy nWB.Sheets("Hoja1").Range("A1")

      Slds

      Eliminar
  26. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  27. ¿Como puedo hacer para que se muestre el directorio como Iconos Extra Grandes? Normalmente se muestra con detalles de archivo.

    ResponderEliminar
    Respuestas
    1. Hola Roger,
      cómo estás?, un placer saludarte igualmente.

      Esta opción no es configurable con .GetOpenFilename... y muestra los 'iconos' como los tengas configurados desde Windows.
      Por tanto si quieres ver los Iconos Extra Grandes deberás indicarlo así en el Explorador de Windows.
      Saludos

      Eliminar
  28. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  29. Hola Buenas tardes Ismael espero estes muy bien, me ha ayudado mucho tu macro pero estoy en un proyecto y en el cual deseo importar a un nuevo libro unos resultados, ya puedo importar los libros al nuevo creado ahora ¿como le puedo hacer para que solo me importe una hoja en especifico, mas no todo el libro?

    ResponderEliminar
    Respuestas
    1. Hola Manuel
      prueba con algo parecido a esto:

      ActiveSheet.Move Before:=Workbooks("NuevoLibro.xlsa").Sheets(1)

      Saludos

      Eliminar
  30. Hola Ismael que tal?

    Acabo de conocer tu foro y me parece excelente. He ejecutado la macro que compartes aca y funciona de maravilla. He querido personalizarla y le he cambiado el nombre del titulo y continua funcionando fenomenal. Luego cuando intento cambiar la extension del archivo a abrir, lo reconoce, pero a la hora de abrirlo abre un nuevo libro excel con varios simbolos y texto dentro del libro, sin embargo el archivo es de extension .edb un software estructural. como hago para que excel y la macro reconozca que programa debe utilizar para abrir esa extension. El software ya lo tengo instalado en mi computador y funciona bien.

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola!
      ten presente que no cualquier archivo se puede abrir (por ser compatible) desde Excel.
      No conozco ese Sw que comentas, pero por tu comentario parece obvio que no se puede abrir desde Excel.. y por eso te aparecen esos 'símbolos extraños'

      Siento no poder decirte nada más

      Saludos cordiales

      Eliminar
  31. hola Ismael

    quería preguntarte como puedo copiar la primera hoja del archivo abierto en el archivo que ejecuto en el macro.

    y después cerrar el archivo abierto.

    muchas gracias por tu ayuda

    ResponderEliminar
    Respuestas
    1. Hola Helber,
      para referirte a la primera hoja del libro abierto podrías indicarlo mediante índices:
      Sheets(1)
      refiriéndose a la primera hoja (a la izquierda) disponible..
      Espero haberte entendido bien
      Saludos

      Eliminar
    2. si pero como puedo copiar esa hoja o que código utilizo para copiar esa hoja y pegarlo en el libro que estoy ejecutando el macro

      Eliminar
    3. no mentiras ya pude muchas gracias :) en realidad es muy útil tu post

      Eliminar
  32. Muchas gracias, fue un gran aporte.

    ResponderEliminar
  33. Hola qué tal, acabo de ver tu post y tengo una duda al ocupar tu macro del post... Verás quisiera "automatizar" desde un formulario el "guardar" la base de datos generada en una ruta especificada por el usuario.. y veo que el método .GetOpenFilename me pide SELECCIONAR un archivo para "abrir" y así obtener su ruta... Pero yo quisiera solo pedirle al usuario una ruta en la que GUARDAR el archivo de la base de datos generada anteriormente... Espero haberme explicado... Te agradezco de antemano.

    ResponderEliminar
  34. Excelente Post y el resto de tus cosas, felicitaciones gran trabajo

    ResponderEliminar
  35. Buenos días, necesito que una macro me abra un archivo que empieza por un texto fijo pero el final va cambiando. Por ejemplo, tengo un archivo que se llama artículos genéricos, pero luego puede llevar un número que va cambiando. ¿Hay alguna forma de decirle al programa que abra el documento que empieza por "artículos genéricos*"?

    Un Saludo

    ResponderEliminar
  36. Hola:
    He estado viendo el foro y otros, en búsqueda de una solución a mi problema. Requiero abrir un directorio a través de un evento en un botón de Excel, pero si llevo dicha carpeta y su contenido a otro equipo, la ruta ya no me sirve ¿Cómo puedo llamar al directorio sin darle una ruta? Es importante mencionar que el libro Excel que contiene la macro se encuentra dentro de la carpeta en cuestión.

    ResponderEliminar
    Respuestas
    1. Hola,
      entiendo te refieres a obtener la IP de la unidad red (no solo la 'letra') para que sea válido desde cualquier otro equipo con acceso a esa red...

      Publicaré en cuanto me sea posible, en un par de semanas, una solución

      Saludos

      Eliminar
    2. Hola Ismael:
      No me refería a una unidad de red, me refería a que la macro sea capaz de abrir su propio directorio, independientemente de dónde se encuentre, aunque lo lleve a otro equipo. Como dato, traté utilizando "ThisWorkbook.Path" de varias formas, pero no funcionó.
      Muchas gracias, saludos.

      Eliminar
    3. bueno,
      ThisWorkbook.Path
      te devolverá sin duda la ubicación o ruta de donde se encuentre el fichero (donde esté la macro), pero tendrás que terminar de completar, con alguna variable el nombre del libro que quieras abrir
      No se si te entendí bien
      Slds

      Eliminar
  37. Hola, Ismael. ¿Cómo puedo abrir el archivo más reciente? Es que en la carpeta donde va a buscarlo va a haber varios que se llaman muy parecedo, sólo cambia el final del nombre que será la hora de creación (*o7_35.xlsm, *10_28.xlsm, *18_13.xlsm)

    ResponderEliminar
    Respuestas
    1. Hola
      lo ideal sería emplear, más que el nombre, la fecha de última modificación o creación

      Subiré un post en breve...

      Saludos

      Eliminar
  38. Ismael, buen día.
    Cómo puedo utilizar la función GetOpenFilename para seleccionar un archivo *xlsm ubicado en mi One-Drive?
    Gracias

    ResponderEliminar
    Respuestas
    1. Hola!
      en teoría si tienes activo OneDrive, DropBox, etc tendrás en tu local una copia sincronizada de lo subido a la nube... a estas carpetas puedes acceder normalmente.
      Saludos

      Eliminar
  39. Hola Ismael, muchas gracias por tu aporte, usé este código para que se vieran todos los archivos y quisiera que al agregarse la ruta, se inserte la imagen del tipo de archivo seleccionado en un control de formulario no sé sí esto será posible y muchas gracias por tu apoyo

    ResponderEliminar
    Respuestas
    1. Hola
      dependerá de un par de cosas...
      necesitarás las distintas imágenes (iconos) de tipos de archivo para poder luego cargarlo...
      y por otro lado dependerá del tipo de control de formulario, ya que por ejemplo en un textbox ¿dónde insertaráis la imagen??... si fuera un botón no habría tanto problema
      Slds

      Eliminar
  40. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Hola!
      la cuestión es que añade un libro nuevo por esta declaración:
      Set ws = Workbooks.Add(xlWBATWorksheet).Sheets(1)
      prueba cambiándola por
      Set ws = ThisWorkbook.Sheets(1)

      Espero te oriente
      Saludos

      Eliminar
  41. Hola Ismael tengo una pregunta. En access tengo un formulario para Importar con Un cuadro de texto donde se ubica la ruta del archivo en excel.
    Y tengo un combobox que quisiera que se llenara con los nombres de las hojas del archivo previamente seleccionado. Esto es posible? Como sería?. Gracias

    ResponderEliminar
    Respuestas
    1. Hola Carlos,
      no sabría decirte... en access las cosas son algo distintas.
      Pero supongo probaría con un bucle que recorra las hojas
      FOR EACH sh IN Worksheets
      Combobox1.additem sh.name
      NEXT sh

      espero te de la pista
      Saludos

      Eliminar
  42. Hola Ismael necesito ayuda urgente, estoy realizando un proyecto donde tengo que abrir el explorador y seleccionar un archivo x; luego una vez seleccionado que se abra mi formulario (importar_archivo)y que los datos que estan en el archivo x aparezcan automáticamente en el Formulario AYUDA POR FAVOR gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      para seleccionar y abrir el fichero puedes leer este mismo post, y puedes ver varios ejemplos de cómo completar formularios en la categoría de 'Macros'.
      También es importante que leas las 'Normas de uso del blog'

      Saludos

      Eliminar
  43. Hola, Ismael.

    Unas consultas acerca de VLookup (buscarv)en diferentes libros.
    Tengo dos libros con una hoja en cada libro:
    1. BASEDATOS(nombre del 1°libro) y HOJA DATOS
    2. LIBROEDICION (nombre del 2° libro) y HOJAEDICION

    En el siguiente código tengo que especificar el nombre del libro BASEDATOS.xlsx para extraer los datos hacia el libro LIBROEDICION, cómo haría para que abra el explorador de archivos y poder elegir la ruta para extraer los datos hacia el libro LIBROEDICION.

    Sub BUSCAR()

    Dim libroactual, libroBD As Workbook

    Application.ScreenUpdating = False

    Set libroactual = ThisWorkbook

    Set libroBD = Workbooks.Open("BASEDATOS.xlsx") 'AQUI SE ESPECIFICA LA RUTA PERO DEBERÍA ABRIR UN CUADRO PARA PODER ELEGIR LA RUTA

    libroactual.Activate


    'AQUI SE VEN RANGO DESDE EL 6 AL 1000 PERO SOLO DEBERIA BUSCAR Y RELLENAR HASTA EL ULTIMO DATO DE LA ULTIMA FILA
    Range("F6:F1000") = Application.VLookup(Range("A6:A1000"), _
    libroBD.Sheets("HOJADATOS").Range("A1:B1000"), 2, False)


    libroBD.Close savechanges:=False

    Application.ScreenUpdating = True

    End Sub



    Por ultimo, si en cada uno de esos libros tengo más de dos hojas, como haría para sincronizar los VLookup tomando como referencia los nombres de cada hoja. (Ej: buscar el A6 de la hoja1 del libro1 y extraerlo del rango de datos $A:$B del libro2; el resultado ponerlo en G6 de la hoja1 del libro1). Y así sucesivamente con cada hoja de cada libro.

    Gracias

    ResponderEliminar
  44. Hola Ismael,

    Es posible que se filtre por imágenes JPG y poder llevar esta imagen a un PictureBox?

    Gracias.

    ResponderEliminar
    Respuestas
    1. Hola Maribel
      con este método, hasta donde sé, no es posible.
      Pero sí se podrían cargar imágenes a un PictureBox...
      En todo caso te recomendaría mejor usar el control de 'Imagen' tiene alguna propiedad más práctica
      Aquí tienes un ejemplo similar
      https://excelforo.blogspot.com/2013/02/vba-cargar-un-grafico-en-un-formulario.html

      Saludos

      Eliminar
  45. Hola que tal Ismael, me gustaría saber como puedo hacer para que en mi libro1 se copien en determinadas celdas los valores de ciertas celdas de mi libro2(el cual se debe seleccionar la ruta del libro2. Las celdas con la informacion del libro que se selecciona la ruta siempre tiene el mismo formato y cada libro tiene solo una hoja)

    De antemano gracias

    ResponderEliminar
    Respuestas
    1. Hola Lalo
      tendrás que abrir el fichero origen (libro2) con la macro, y una vez abierto referir en el libro1 (donde entiendo tienes tu macro principal) el destino:
      Thisworbook.sheets("Hoja final").range("A1").value= workbooks("Libro2").sheets(1).range("X11").value

      Saludos

      Eliminar
  46. Hola, buenas.
    quisiera ver si me puedes ayudar.

    tengo un excel con un botón de guardar un archivo xml, pero lo hace automático a la direccion predeterminada que le tengo. quiero ver si se puede colocar que al darle guardar salga el cuadro para seleccionar donde lo quiero guardar. es decir. puede seleccionar la carpeta donde se guardara.

    Gracias!

    ResponderEliminar
    Respuestas
    1. Hola!
      la clave sería aplicar a una variable la búsqueda realizada, puedes emplear este método:
      https://excelforo.blogspot.com/2010/04/explorador-en-vba.html

      Saludos

      Eliminar
  47. Hola y esperando que tengan un buen día espero pueda ayudarme con una duda:

    estoy ejecutando la macro desde un archivo de excel, cuando selecciono el archivo que estaba buscando, quisiera que los datos se importaran a la misma hoja de excel en la que estoy trabajando la macro, puesto que se abre otro archivo de excel
    tiene qu ver con Workbooks.Open FileName:=RutaArchivo

    ResponderEliminar
    Respuestas
    1. Hola,
      son aspectos distintos de un posible proceso... ;-)
      Si quieres copiar y pegar datos de un fichero a otro, lo primero que procede es abrir el fichero Origen e identificar la hoja y rango a copiar.
      Una vez copiado solo debes pegar lo copiado en el primer libro, en el destino... donde está la macro.
      Para esto puedes usar:
      ThisWorkbook.Sheets("hoja destino").range("A1")

      de esa manera pegaras en el mismo libro de la macro y en la hoja que indiques

      Saludos!

      Eliminar
    2. Muchas gracias, fue de mucha ayuda.

      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.