Nombres antiguos

23/11/2009 - 18:08 por Desastres | Informe spam
Hola.

Tengo un directorio que parece un bebedero de patos y quiero limpiarlo


Suponed un Formulario con :

una etiqueta = Quitar y junto un textBox Vacío( se pone lo que hay que quitar. En este caso
cualquiera de lo puesto entre comas en el textbox pedro Luis, Luís, pedro, luis, luís pedroluis,
pedroluí, pedro luis, de)

una etiqueta = PONER y junto un textBox Vació( se pone lo que hay que PONER aquí en este
caso "Luis_Pedro - " )

una etiqueta =Poner al principio y junto un opción botón

una etiqueta =Poner al final y junto un opción botón



una etiqueta ="Ordenar por" y junto un opción botón "Fecha"

una etiqueta =Poner al final y junto un opción botón "Tamaño"



Quisiera hacer algo como lo que digo a continuación , pero que mister Excel me entienda. Lo pongo
todo en castellano , por si algo no lo pongo bien



ChDir "E:\A\"

Supongamos que hay entre otros, 3 ficheros

a- "Factura 2009 de pedro Luis - José Carlos (2).xls""

b- "Luis_Pedro - Factura Jose Carlos "

c "Luis_Pedro - Factura Jose Carlos 1"


Nombre = ""

Nombre2 = ""
for bucle1= 1 to "numero de ficheros en este directorio"



Nombre= Al nombre que tenga el fichero

extensión = Nombre_del_Fichero menos desde el punto hasta el final ( .xls)

Nombre= Nombre - extensión



For bucle2 = 1 To len(nombre)

1º) Quita los números

2º) Quita lo que pone en el textbos asociado a la etiqueta QUITAR

3º) Quita los dobles espacios

4º) Quita cualquier carácter que no se una letra

5º) Quita letras acentuadas

6º) Quita el ultimo carácter si es un espacio

7º) Crea "Nuevo Nombre" con lo que quede.

Next bucle 2

A este "Nuevo Nombre" añadirle (según el botón de opción seleccionado, al principio o al
final , el textbox PONER (supongamos que es al principio)

(aquí debe quedar) Nombre2 = "Luis_Pedro - Factura Jose Carlos"

Si en el directorio existe Nombre2 entonces Nombre2 = Nombre2 & " 1" (u otro numero,
siempre de uno en uno (2,3,4,5,6,7,8)Limite el numero ficheros del directorio

es decir en este caso Nombre2= "Luis_Pedro - Factura Jose Carlos 2" (Si, como en este
caso hay varios "Luis_Pedro - Factura Jose Carlos " que los ordenara por fecha o tamaño

next bucle

Nombre2 = Nombre2 & Extensión

guardar Nombre2

Borrar "Factura 2009 de Pedro Luis - José Carlos (2).xls" ( el Nombre del que partimos, en el
directorio)

terminar con esta locura.


Agradecería una mano.

Alguna cosa se hacer. pero lo relativo a directorios, contaje, búsqueda de partes y su sustitución,
así como nombrar con números ascendentes dependiendo de la fecha, no está a mi alcance


Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas.

Preguntas similare

Leer las respuestas

#6 Desastres
30/11/2009 - 18:59 | Informe spam
Hola Héctor.
Gracias.
Lo miraré despacito


Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas.
"Héctor Miguel" escribió en el mensaje
news:%
hola, Des !

> Si puedes facilitar ayuda sobre:
> -Contar ficheros en un directorio y abrirlo secuencialmente
> -ver añadir o quitar a las cadenas caracteres ASCII , no letras
> -Sacar la fecha y el tamaño del nombre de un fichero

el siguiente mensaje es un pelin largo (asi que te armas de paciencia, ok ?)
y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

-Contar ficheros en un directorio y abrirlo secuencialmente

1) si los vas a abrir... no se cual seria la intencion de "contarlos" (?)

- contarlos (de la forma mas sencilla que se me ocurre)

Sub Cuenta_archivos()
Dim Directorio As String, Tipo As String, Fichero As String
Directorio = "c:\mis documentos\"
Tipo = "*.xls"
MsgBox ExecuteExcel4Macro("counta(files(""" & Directorio & Tipo & """))")
End Sub

- abrirlos (uno por uno, los "trabajas", y LOS CIERRAS)

Sub Abrir_archivos_en()
Dim Directorio As String, Tipo As String, Fichero As String
Directorio = "c:\mis documentos\" ' <= AJUSTA
Tipo = "*.xls"
Archivo = Dir(Directorio & Tipo)
Do While Archivo <> ""
Workbooks.Open Ruta & Archivo
' aqui "trabajas con cada archivo Y LO CIERRAS... '
Workbooks(Archivo).Close SaveChanges:=False ' o True ??? '
Archivo = Dir()
Loop
End Sub

-ver anadir o quitar a las cadenas caracteres ASCII , no letras

2) para esta parte, una posible solucion (sencilla) pudiera ser el uso de expresiones regulares
dependiendo de como necesites "validar" algunos otros caracteres (espacios, guiones, puntos,


???)
por si puedes apuntar algunos detalles mas concretos ?

-Sacar la fecha y el tamano del nombre de un fichero

3) prueba con una macro +/- como la siguiente (en un directorio de pocos archivos)

Sub Muestra_fechas_y_tamano()
Application.ScreenUpdating = False
Dim Msj As String, Ruta As String, Tipo As String, Archivo As String, _
Last As String, Fecha As Date, Hora As Date, Tamano As String
Msj = "Modificado (fecha y hora):" & vbTab & "Tamaño (Kb):" & vbTab & "Nombre archivo:"
Ruta = "c:\mis documentos\" ' <= AJUSTA
Tipo = "*.xls"
Archivo = Dir(Ruta & Tipo)
Do While Archivo <> ""
Last = FileDateTime(Ruta & Archivo)
Fecha = Left(Last, InStr(Last, " ") - 1)
Hora = Mid(Last, InStr(Last, " ") + 1)
Tamano = Format(FileLen(Ruta & Archivo) / 1024, "#,##0.0") & " Kb"
Msj = Msj & vbCr & Fecha & vbTab & Hora & vbTab & Tamano & vbTab & Archivo
Archivo = Dir()
Loop
MsgBox Msj
End Sub

esta es otra forma de obtener diversos atributos de los archivos en una carpeta:
(que puedes adaptar para otras necesidades)...
1) toma la carpeta predeterminada que pongas en 'A1' (p.e. -> c:uta y\sub-carpeta)
2) pone en el rango 'A2:E2' los titulos para algunos de los atributos de los archivos
3) a partir de la fila 3, vacia los nombres de los archivos que se encuentren (y sus atributos)

Sub LIsta_de_archivos()
Application.ScreenUpdating = False
Dim Carpeta As String: Carpeta = Range("a1"): Cells.Clear
Range("a2:e2") = Array("Ruta", "Nombre", "Tamaño", "Modificado", "Tipo")
Listar_archivos_en Carpeta, True
End Sub

Sub Listar_archivos_en(Carpeta As String, Completo As Boolean)
Dim Archivo, SubCarpeta, Fila As Long
Fila = Range("a65536").End(xlUp).Row + 1
With CreateObject("scripting.filesystemobject")
With .GetFolder(Carpeta)
For Each Archivo In .Files
With Archivo
Range("a" & Fila & ":e" & Fila) = Array( _
Application.Substitute(.Path, .Name, ""), .Name, .Size, .DateLastModified, .Type)
End With
Fila = Fila + 1
Next
If Completo Then
For Each SubCarpeta In .SubFolders
Listar_archivos_en SubCarpeta.Path, True
Next
End If
End With
End With
Range("a1:e1").EntireColumn.AutoFit
Range("a1") = Carpeta
Debug.Print ActiveSheet.UsedRange.Address
End Sub


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida