VB Excel abrir archivo nombre incompleto

Resuelto
Xixi -  
 Papoum -
Hola,

Deseo abrir un archivo del cual conozco el directorio pero no el nombre completo.

Ejemplo: abrir el archivo D:\Groupe\Test280520081102.xls

Sabiendo que en mi directorio solo hay un archivo cuyo nombre comienza con "Test"

Gracias por su ayuda
Configuración: Windows XP Internet Explorer 6.0

17 respuestas

  1. xixi
     
    Euhhh casi para el primero, pero de hecho el Dir no parece funcionar aparentemente.

    Sub TestDir()

    Dim R As String
    R = ThisWorkbook.FullName
    R = Left(R, 8) & "*"
    MsgBox R 'el nombre truncado del libro y la ruta. OK devuelve D:\Group
    MsgBox Dir(R) 'el nombre completo del libro. KO no devuelve nada
    End Sub

    Por otro lado....

    Fich = "D:\Groupe\" & dir("D:\Groupe\Test1*") me devuelve el archivo correcto.

    :-) :-) :-) :-) :-)

    Otra pregunta pequeña relacionada ;-) como intento ser ordenado en lugar de poner D:\Groupe\ prefiero poner .\ y luego para abrir el libro de trabajo creo que solo se necesita el nombre del .xls así que ¿cómo eliminar los caracteres que dan la ruta del archivo para quedarme solo con el nombre sabiendo que este número de caracteres es fijo?

    Muchas gracias lermite
    1
  2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    Si solo tienes un archivo que comienza con Test, ¿por qué poner todos esos números después?

    ¡Hasta luego!
    --
    La experiencia enseña más seguramente que el consejo. (André Gide)
    0
    1. Xixi
       
      Se trata de un archivo generado automáticamente cuyo nombre no debe modificarse. Por lo tanto, debo mantener el formato, pero en cada lanzamiento de mi programa el archivo ha sido reemplazado por otro con una marca de tiempo diferente.
      Así que sé que tenemos un archivo Test??????.xls que abrir, pero eso es todo.
      0
  3. zavenger Mensajes publicados 817 Estado Miembro 161
     
    Hola, deberías salir adelante con la función DIR() que te devolverá el contenido de un directorio.
    0
  4. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    intenta con..
    dim Fich como cadena
    Fich = Dir("D:\Groupe\Test") & "*"

    abrir Fich
    Funciona, lo he probado.
    Hasta luego
    --
    La experiencia enseña más seguro que el consejo. (André Gide)
    0
    1. Xixi
       
      En haciendo

      Fich = Dir("D:\Groupe\") & "*"
      MsgBox Fich

      Soy capaz de ver los archivos en mi directorio
      Por otro lado

      Fich = Dir("D:\Groupe\Test") & "*"
      MsgBox Fich

      Devuelve siempre *
      ¿No está DIR() hecho para listar el contenido de un directorio y, por lo tanto, le damos como parámetro un directorio y no un directorio + comienzo del archivo?

      De no ser así, ¿podemos hacer un bucle sobre Dir("D:\Groupe\") & "*" y probar si el comienzo de la cadena devuelta es igual al valor correcto?
      Ejemplo:
      en el directorio tengo Test128052008 y Test227052008, sé que busco un archivo Test1********, seguramente puedo comparar el comienzo de Fich con la cadena "Test1" ¿no?
      0
      1. Xixi > Xixi
         
        Et mientras estamos en la tarea de trabajar con archivos, tengo otra pregunta (sí, soy un principiante jaja)

        Cuando cierro un archivo y quiero (o no) guardar, hago un Fichier.close True (o False)

        Si elimino una hoja, utilizo un Delete, pero el sistema me pregunta si quiero eliminar todos los datos de la hoja. ¿Cómo forzar esta eliminación? (no hay forma de poner True o False aparentemente)

        Igualmente, cuando abro un archivo .xls donde hay actualizaciones (relación con otro archivo), me pregunta si quiero actualizar. Pero no quiero, jaja, ¿cómo puedo decirle esto antes de que pregunte?

        Gracias
        0
      2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199 > Xixi
         
        Dices que solo hay un archivo que comienza con Test. Si es así, devuélveme el único archivo que comienza con Test pero completo.
        Para tus otras preguntas volveré más tarde.
        EDITAR:
        Leí tu segundo mensaje, ¿no podrías explicar CLARAMENTE desde el principio, por favor? Primero hay uno, luego hay varios, ¿qué es este lío...? No voy a revisar el asunto cada vez...

        EDITAR 2:
        Para evitar que Excel pida confirmación...
        Application.DisplayAlert = false
        y para volver a la normalidad
        Application.DisplayAlert = True

        EDITAR 3:
        A=1
        Fich = Dir("D:\Groupe\Test") & A & "*"
        o bien
        Fich = Dir("D:\Groupe\Test1") & "*"
        Pero tiene que haber solo uno.
        ¡Y atención!! Con Dir el caso importa... Test no es igual a test.


        --
        La experiencia instruye más certeramente que el consejo. (André Gide)
        0
    2. Papoum
       
      ¡Bravo! Me estaba rompiendo la cabeza, en realidad es muy simple.
      ¡Gracias de nuevo!
      0
  5. Xixi
     
    Entonces, acabo de probar todo ^^

    Fich = Dir("D:\Groupe\Test1") & "*"
    MsgBox Fich

    Devuelve * y, sin embargo, tengo un archivo Test128051653 en mi carpeta (y también un Test228051653, pero este no debe tenerse en cuenta debido a la ruta absoluta), ¿no es extraño? :'(

    Antes de todas mis instrucciones, intenté un Application.DisplayAlert = false y se planta :(
    Error de ejecución '438'
    Propiedad o método no gestionado por este objeto

    Snif :'(
    0
  6. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    he olvidado la "S"
    Application.DisplayAlerts = False
    para el Dir yo Re.Re control.
    EDIT:
    bueno, como dije... yo Re.Re control
    incluso creé un libro con tu nombre, y a diferencia de lo que había dicho, no hay diferencia entre mayúsculas y minúsculas y FUNCIONA PERFECTO
    Pero solo debe haber un único archivo con ese principio de nombre
    verifica que no haya errores en el directorio, la letra del DD, etc.
    ve en el explorador de archivos y controla todo.
    incluso si hay varios archivos que comienzan con Test1 DIR devuelve el primero encontrado....
    Otra cosa, haz un copiar/pegar del código que he puesto para asegurarte de que no tienes errores.

    --
    La experiencia instruye más seguramente que el consejo. (André Gide)
    0
  7. shishumi Mensajes publicados 18 Fecha de registro   Estado Miembro
     
    Hola,
    intenta hacer esto:
    Option Explicit ' opción a activar en VBA menú Herramientas | Referencias: Marcar Microsoft Scripting Runtime (NO OLVIDAR) Const DossierFichiers As String = "C:\" 'la ruta de tu directorio Sub Ouvrir_fichier() ListeFichiersDans DossierFichiers End Sub Private Sub ListeFichiersDans(ByVal NomDossier As String) Dim FSO As Scripting.FileSystemObject Dim DossierSource As Scripting.Folder Dim Fichier As Scripting.File Dim x As Long Set FSO = New Scripting.FileSystemObject Set DossierSource = FSO.GetFolder(NomDossier) x = 0 For Each Fichier In DossierSource.Files x = x + 1 Workbooks.Open Filename:=Fichier Next Fichier MsgBox Fichier Set Fichier = Nothing Set DossierSource = Nothing Set FSO = Nothing End Sub

    --
    La paciencia es un arte que se trabaja.
    0
    1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
       
      Behhh sí, pero ¿has visto la cantidad de líneas de código para reemplazar una? Haz mejor una prueba
      con el DIR para tener una confirmación.
      ¡Hasta luego!
      EDIT: y además tu macro no responde a la solicitud... :-D
      --
      La experiencia enseña más claramente que el consejo. (André Gide)
      0
  8. Xixi
     
    ¿Ehmmm sí, no, ¿hay algo menos complicado? O ¿puedes explicarme? Lo siento, soy un inútil :-(

    En cuanto al DIR, siempre devuelve * :-( no entiendo por qué funciona contigo, lermite :s ¿hay alguna opción que activar???
    0
  9. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    No, nada que agregar, Dir devuelve un archivo o nada si no encuentra ("") pero seguramente no "*"
    así que persisto y firmo, tienes un error ya sea en el directorio o en los nombres de archivos... te toca encontrarlo, no estoy frente a tu PC

    EDIT:
    Haz un copiar/pegar de esta sub y presiona F5
    Sub TestDir() Dim R As String R = ThisWorkbook.FullName R = Left(R, 8) & "*" MsgBox R 'el nombre truncado del libro y la ruta. MsgBox Dir(R) 'el nombre completo del libro End Sub


    Pero creo que hay una cosa... Intenta también... si no está en el mismo directorio
    Fich = "D:\Groupe\" & dir(fich)
    --
    La experiencia instruye más seguramente que el consejo. (André Gide)
    0
  10. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Para abrir el libro, es preferible, por no decir obligatorio, proporcionar el camino + nombre + extensión, es decir, completo.
    ¿Por qué?
    No es porque trabajes en un directorio que sea el que está activo, por lo tanto, si solo das el nombre, el libro que intentas abrir se hará con el camino del directorio corriente.
    Para hacer un directorio activo, es necesario hacer un Chdrive y un ChDir. (ver ayuda) que, de hecho, no explica bien, es obligatorio hacer primero un ChDrive con la letra del disco duro y luego un ChDir en el directorio.
    ¡Hasta luego!
    EDIT:
    Para la prueba 2, reemplaza la línea
    R = Left(R, 8) & "*"
    por
    R = Left(R, 10) & "*"
    De hecho, es porque faltaba el \ que no funcionaba.
    --
    La experiencia enseña más seguramente que el consejo. (André Gide)
    0
  11. onesdf Mensajes publicados 375 Fecha de registro   Estado Miembro Última intervención   120
     

    Fich = Dir("D:\Groupe\Test1") & "*"
    MsgBox Fich

    Esto devuelve * y, sin embargo, tengo un archivo Test128051653 en mi carpeta (y también un Test228051653, pero ese no debería tenerse en cuenta dado el camino en duro), ¿no es extraño? :'(


    ¿No sería el comando en su lugar Fich = Dir("D:\Groupe\Test1" & "*")?
    0
  12. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola onesdf,
    ver publicaciones 14 y 15
    ¡Hasta luego!
    --
    La experiencia enseña más seguro que el consejo. (André Gide)
    0
    1. onesdf Mensajes publicados 375 Fecha de registro   Estado Miembro Última intervención   120
       
      No había leído hasta el final, mil disculpas :)
      0
      1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199 > onesdf Mensajes publicados 375 Fecha de registro   Estado Miembro Última intervención  
         
        Ningún problema, solo aquellos que no hacen nada nunca cometen errores :D
        ¡Hasta luego!
        --
        La experiencia instruye más seguramente que el consejo. (André Gide)
        0
  13. xixi
     
    No sé, no me entusiasma ^^
    Me gustaría poder abrir mi archivo dando una ruta relativa :$

    De hecho, esa es la única restricción al ejecutar el programa: tener los documentos anexos en la misma carpeta que el principal (esto permite archivar un historial cada mes)

    Ciertamente, con los métodos donde pongo el nombre de forma fija D:\Groupe\Test1* funciona, pero sería mejor tener .\Test1*, sabiendo que mi archivo principal está necesariamente en la misma carpeta Groupe *-)

    Fich = "<.\>" & Dir("<.\Test1*>") 'esto no funciona, devuelve <.\>

    De hecho, en la carpeta siempre tenemos principal.xls desde donde se lanza el programa y Test130051610.xls que debemos abrir.
    La cuestión es que podemos estar en D:\Groupe1\ o en D:\Groupe2\, siendo la única restricción tener principal.xls en esta carpeta junto con los archivos anexos.

    Es un poco complicado, de hecho :-(
    0
    1. onesdf Mensajes publicados 375 Fecha de registro   Estado Miembro Última intervención   120
       
      Fich = Dir(ActiveWorkbook.Path & "\TEST1*")
      0
      1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199 > onesdf Mensajes publicados 375 Fecha de registro   Estado Miembro Última intervención  
         
        La idea es buena pero no del todo correcta
        Dim Appli As String Appli = ThisWorkbook.Path & "\" Fich = Appli & Dir(Appli & "test1*")

        o de una vez...
         Fich = ThisWorkbook.Path & "\" & Dir(ThisWorkbook.Path & "\" & "test1*")

        --
        La experiencia enseña más seguramente que el consejo. (André Gide)
        0
  14. dede50
     
    Hola, me permito continuar esta conversación ;p

    Primero que nada, gracias por el código, ¡es muy útil! :)

    Bien, imaginemos que tenemos varios Archivos en un directorio, como test1, test2, test4012...
    Si queremos eliminarlos todos, ¿es necesario pasar por un bucle?
    Intenté esto, funciona, pero tengo miedo de que sea un poco bestia ^^'

    Dim Fich As String
    Fich = "C:\" & Dir("C:\test*")
    Do While Fich <> "C:\"
    Kill Fich
    Fich = "C:\" & Dir("C:\test*")
    Loop

    Dame tu opinión ;P
    0
  15. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    Mata "C:\test*"
    Suficiente..
    A+

    --
    La experiencia enseña más seguramente que el consejo. (André Gide)
    0
  16. dede50
     
    De hecho, es realmente más simple.
    Gracias
    ¡Hasta luego!
    0