VB Excel abrir archivo nombre incompleto
Resuelto
Xixi
-
Papoum -
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
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
-
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 -
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)-
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.
-
-
Hola, deberías salir adelante con la función DIR() que te devolverá el contenido de un directorio.
-
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)-
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?- 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 - 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)
-
-
-
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 :'( -
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) -
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. -
¿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??? -
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 F5Sub 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) -
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) -
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" & "*")? -
Hola onesdf,
ver publicaciones 14 y 15
¡Hasta luego!
--
La experiencia enseña más seguro que el consejo. (André Gide) -
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 :-( -
-
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 -
Hola,
Mata "C:\test*"
Suficiente..
A+
--
La experiencia enseña más seguramente que el consejo. (André Gide) -