¿Abrir documento de word desde excel?

Muy buenas tardes expertos, mi consulta es la siguiente

Tengo un archivo excel el cual está distribuido de la siguiente manera:

Columna E : Nombre de la carpeta de destino

Columna D : Nombre del Archivo destino

Columna C : Nombre del Archivo de Origen

Columna B : Nombre de la carpeta de origen

la macro que tengo me abre todos los excel según las celdas de archivo y carpeta origen y luego el archivo abierto lo guarda según el nombre y la carpeta del destino; ahora el detalle es cuando la macro llega a un archivo de Word, la macro se para y me sale un error de no encontrado.

La macro que utilizo es la siguiente:

ActiveSheet.Range("f5").Select 'selecciona la celda
mio = ActiveWorkbook.Name
nombre = ActiveCell.Offset(0, -2).Value
ruta1 = ActiveCell.Offset(0, -4).Value
ruta2 = ActiveCell.Offset(0, -1).Value
Workbooks.Open ruta1 & ActiveCell.Offset(0, -3)
ActiveWorkbook.SaveAs ruta2 & nombre
ActiveWorkbook.Close False

Haber si me dan una manito con esto...

Gracias de antemano...

1 respuesta

Respuesta
1

Por lo que veo estás reubicando archivos con nuevos nombres. Para hacer algo así no es necesario abrirlos para después cerrarlos, basta con utilizar la sentencia:

name ... as ...

En tu ejemplo sería algo asi:

En B1 carpeta vieja

En C1 nombre viejo

En D1 nombre nuevo

En E1 carpeta nueva

Sub prueba()
viejo = Range("b1") & Range("c1")
nuevo = Range("e1") & Range("d1")
Name viejo As nuevo
End Sub

recuerda finalizar

Disculpa en la anterior macro faltaba primera el filecopy, esta es la macro correcta:

En tu ejemplo sería algo asi:
En B1 carpeta vieja
En C1 nombre viejo
En D1 nombre nuevo
En E1 carpeta nueva

Sub prueba()
viejo = Range("b1") & Range("c1")
viejo2 = Range("e1") & Range("c1")
nuevo = Range("e1") & Range("d1")
FileCopy viejo, viejo2
Name viejo2 As nuevo
End Sub

Hola gracias por la respuesta, la macro funciona perfectamente el detalle es que si tengo unas 400 filas con diferentes archivos y siempre aparecerán mas entre lineas pues tendría que cambiar todas las ubicaciones de las celdas cada ves que aumente una linea supongamos en la fila 45 y cambiar todas las demás a partir de esta fila (b1, c1, e1, c1, e1, d1) por las consecutivas, es por eso que utilizo el ActiveSheet.Range, así si aumento una fila solo tendría que cambiar la una sola celta dentro de la programación.

Si tienes más líneas de B1 hacia abajo y con la misma estructura, basta con usar un bucle do while para que ejecute todas las líneas de datos.

disculpa mi falta de conocimiento pero como sería en ese caso la macro???

Bien, te explico:

Nos imaginamos que tenemos la lista asÍ:

En B1 carpeta vieja
En C1 nombre viejo
En D1 nombre nuevo
En E1 carpeta nueva

...

En B2 carpeta vieja
En C2 nombre viejo
En D2 nombre nuevo
En E2 carpeta nueva

...

...

...

Ahora con esta macro nos haría todos los cambios automáticamente hasta terminar la lista.

Sub prueba()
'por luismondelo
range("b1").select
do while activecell.value <>""
viejo = activecell.value & activecell.offset(0,1).value
viejo2 = activecell.offset(0,3).value & activecell.offset(0,1).value
nuevo = activecell.offset(0,3).value & activecell.offset(0,2).value
FileCopy viejo, viejo2
Name viejo2 As nuevo
activecell.offset(1,0).select
loop
End Sub

recuerda finalizar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas