Archivar documentos word en carpetas desde excel

13/02/2008 - 22:38 por Jose | Informe spam
Hola foro:
Esta exposición la he hecho en el grupo de Word pero quisiera saber si es
posible hacerlo con un procedimiento VBA.
Necesito que alguien me ayude con lo siguiente:
En una carpeta que se llama "Archivo general de clientes", tengo 365
documentos de word que necesito guardar en las subcarpetas de cada uno de
los clientes que tambien se encuentran en esta carpeta general. Los
documentos y las carpetas tienen un nombre mas largo pero el principio de
unos y otras es la referencia única de cada cliente. Es un número de 8
dígitos seguido de un "-" y luego nombre, población, etc... creo que lo
importante son esos 8 dígitos primeros.
Hice algo parecido con fichas de clientes en excel y pude conseguir archivar
las fichas en las subcarpetas aunque la diferencia con lo que necesito ahora
es que al mismo tiempo abría la carpeta y archivaba la ficha. Ahora es
diferente porque las carpetas ya están creadas...
Estoy pensando en un procedimiento que "metiera/archivara" en cada
subcarpeta cuyo nombre empieza por un número de 8 digitos, p.e. "71000123"
el correspondiente documento de word (formato RTF) cuyo nombre empieza con
ese mismo número, es decir: "71000123-patatinpatatan.rtf" y así
sucesivamente.
Si es posible, cuando la subcarpeta no exitiera la creara con el mismo
nombre del documento word y archivara ese documento dentro tambien. (¿con
tratamiento de errores? ... eso sería ya lo máximo).
Gracias por la ayuda.
José Rafael

Preguntas similare

Leer las respuestas

#11 Monica May
15/02/2008 - 00:55 | Informe spam
Héctor Miguel escribió:


sigo sin poder ver el panorama completo con "cierta cliaridad"...

1) si lo importante para vincular subcarpetas y archivos *.RTF de clientes son solamente OCHO digitos...
cual es el objetivo de (man)tener subcarpetas cuyos nombres son de ~80 caracteres -??????????-

2) (seguramente) esta situacion dara origen a confusiones para cualquier codigo (p.e.)
si consideras que despues de los 8 digitos, cualquier cambio en los caracteres es ya una subcarpeta distinta (entonces...)
como determinar cual es la buena ? (asumiendo que pudieran encontrarse dos o mas que inicien con los mismos 8 digitos)

3) o sera acaso que la intencion es crear una subcarpeta por cada documento *.RTF ???

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.





Hola hector :-)

pues en eso estaba tambien que no podia entender [ bueno no entendia
todo en si no le veia claridad ? y aun no las tengo todas claras pero
bueno :D ] no entendia es el porque el nombre y los digitos si realmente
lo que importa es lo digitos que no se repiten :-?

usea se vamos aclarando esos agujeros oscuros :-P creo ??? :-P !!

Y anda que no le he estado dando vueltas al asunto :-ufhh!!

Saludos
Monica
Respuesta Responder a este mensaje
#12 Jose
15/02/2008 - 08:10 | Informe spam
Estoy de acuerdo en la posibilidad de crear de nuevo las carpetas guradando
los documentos en word y cambiar el código que os facilité para archivar las
fichas en excel a posteriori.
gracias
José Rafael

"Monica May" escribió en el mensaje
news:
Hola jose,


Tengo 827 carpetas con nombres largos es verdad +- 80 caracteres... los
que mas
ejemplo de nombre de carpeta:
71012123-Adrian Pérez Rubio_46520 Canals (Valencia)-E44




Bien la organizacion de todo la veo un poco enrevesada :-? pero bueno a
ver estoy pensando en como podrias organizartelo mejor ...


La ruta la puedo reducir sensiblemente trasladando las carpetas por
ejemplo a un directorio diferente:
C:\Archivo general de clientes\ (tambien puedo reducirlo a simplemente
Archivo C:\Archivo ( y luego mover)



con esto me facilitas a mi el commando :) pero estoy pensando :-\


El nombre de los documentos es de aproximadamente 25-30 caracteres..
ejemplo. 71012123-Adrian Pérez Rubio



bien pregunto y comento »

Y si se eliminan las carpetas que tienes creadas ?

Y cogemos y creamos unas subcarpetas por cada archivo de word que tienes
en el directorio y luego modificar la macro de excel para que te guarde
los archivos de excel dentro de esas carpetas creadas ???

ya que el problema veo que esta con los archivos de word y carpetas con
caracteres excesivos ...

Entonces pues ahi tendrias a simple vistazo las carpetas asi »

71012123-Adrian Pérez Rubio

ya que no es necesario que sepan el codigo postal y etc... ya que para
saber eso podrias crear un archivo de excel adicional con todos los datos
de los clientes para que quien fuera de la empresa consultara los datos de
esos clientes en caso de necesidad ??

No sep digo eh? :-P !!

Saludos
Monica




Respuesta Responder a este mensaje
#13 Héctor Miguel
15/02/2008 - 08:41 | Informe spam
hola, Jose !

1) El motivo de el nombre largo de las carpetas es poque necesito que figuren:
el codigo: 71012123
el nombre: Adrian Pérez Rubio
la población: 46520 Canals (Valencia)
Agente : E42
Son "necesidades" de datos para el trabajo de muchas personas.



con estos "requerimientos" para el nombre de la carpeta... veo (medio)dificil "cumplirte" con esta parte de tu solicitud inicial:
"... cuando la subcarpeta no exitiera la creara con el mismo nombre del documento word y archivara ese documento dentro tambien."
"... con tratamiento de errores? ... eso seria ya lo maximo)"

2) Los codigos de clientes son siempre UNICOS no se pueden repetir...
3) ... las carpetas ya existen... se trata de archivar dentro de ellas el documento word (por cierto son 325 documentos no 825 ni 865)



la siguiente macro (obviamente) no esta probada bajo las condiciones "reales" de tu situacion tan especial :))
es para trabajarse desde excel (version MINIMA: 2000) te sugiero hacer prueba/s sobre datos COPIA (solo por si las dudas) y...
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Option Base 1
Sub Mover_RTF()
Dim Base As String, sFolder As Object, sFolders(), n As Integer, x As Integer, _
Cliente As String, Codigo As String, Cambio As String, Nueva As String
Base = "c:\documents and settings\josé rafael\mis documentos\archivo general de clientes\"
With CreateObject("scripting.filesystemobject").GetFolder(Base)
ReDim sFolders(.SubFolders.Count)
For Each sFolder In .SubFolders
n = n + 1: sFolders(n) = sFolder.Name: Next: End With
Names.Add "SubCarpetas", Join(sFolders, ",")
Names.Add "SubCarpetas", Split(Evaluate(Names("subcarpetas").RefersTo), ",")
Names.Add "Documentos", "=files(""" & Base & "*.rtf"")": Erase sFolders
For n = 1 To Evaluate("counta(documentos)")
Cliente = Evaluate("index(documentos," & n & ")")
Codigo = Evaluate("left(index(documentos," & n & "),8)")
On Error Resume Next
x = Evaluate("match(""" & Codigo & """,left(subcarpetas,8),0)")
On Error GoTo 0
If x Then
Cambio = Base & Evaluate("index(subcarpetas," & x & ")") & "\"
Else
Nueva = Base & Left(Cliente, Len(Cliente) - 4)
MkDir Base & Nueva
Cambio = Base & Nueva & "\"
End If
Name Base & Ciente As Cambio & Cliente
Next
Names("subcarpetas").Delete: Names("documentos").Delete
End Sub
Respuesta Responder a este mensaje
#14 Héctor Miguel
15/02/2008 - 08:49 | Informe spam
hola (de nuevo), Jose !

ANTES de que corras las pruebas... una "fe de erratas":
(eso de escribir codigos de memoria como que...) :((

cambia la cuarta linea antes del final... -> me he "comido" una "L" en la primer variable de "cliente" (dice: ciente)
de: -> Name Base & Ciente As Cambio & Cliente
a: -> Name Base & Cliente As Cambio & Cliente

saludos,
hector.
Respuesta Responder a este mensaje
#15 Monica May
16/02/2008 - 00:24 | Informe spam
Hola Hector :-)

Ahora que tengo un ratito libre estoy probando el codigo pero me da
error 13 de no concidir tipos »

Cliente = Evaluate("index(documentos," & n & ")")
Codigo = Evaluate("left(index(documentos," & n & "),8)")

si la ejecutas una vez da error en la linea Cliente = evaluate etc..

Si restableces el error y la vuelves a ejecutar »

funciona :-) perfectamente

lo he probado con rutas como nos explicaba Jose »

carpetas » [ ocho digitos-nombre completo direccion codigo y sin acentos
:-P ]

y los archivos »

[ mismos ocho digitos-nombre completo ]

Pero esto estoy mirando a ver si puedo modificarla :-) !!

Estoy pasandole [ F8] al codigo para mirarlo con mas detenimiento [ y no
sabia yo que se podia interactuar asi con los nombres definidos :-)

No se a ver que nos comenta Jose :-) !!

Saludos
Monica

Pd: si no puedo hoy ya comento mañana !!



'[solucion a OP ]

Option Base 1
Sub Mover_RTF()
Dim Base As String, sFolder As Object, sFolders(), n As Integer, x As Integer, _
Cliente As String, Codigo As String, Cambio As String, Nueva As String
Base = "c:\documents and settings\josé rafael\mis documentos\archivo general de clientes\"
With CreateObject("scripting.filesystemobject").GetFolder(Base)
ReDim sFolders(.SubFolders.Count)
For Each sFolder In .SubFolders
n = n + 1: sFolders(n) = sFolder.Name: Next: End With
Names.Add "SubCarpetas", Join(sFolders, ",")
Names.Add "SubCarpetas", Split(Evaluate(Names("subcarpetas").RefersTo), ",")
Names.Add "Documentos", "=files(""" & Base & "*.rtf"")": Erase sFolders
For n = 1 To Evaluate("counta(documentos)")
Cliente = Evaluate("index(documentos," & n & ")")
Codigo = Evaluate("left(index(documentos," & n & "),8)")
On Error Resume Next
x = Evaluate("match(""" & Codigo & """,left(subcarpetas,8),0)")
On Error GoTo 0
If x Then
Cambio = Base & Evaluate("index(subcarpetas," & x & ")") & "\"
Else
Nueva = Base & Left(Cliente, Len(Cliente) - 4)
MkDir Base & Nueva
Cambio = Base & Nueva & "\"
End If
Name Base & Ciente As Cambio & Cliente
Next
Names("subcarpetas").Delete: Names("documentos").Delete
End Sub


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida