Cerrar fichero xlsx ubicado en un servidor de red.

Worksheets(7).Select
Range("A1000000").End(xlUp).Offset(0, 0).EntireRow.Copy
Workbooks.Open Filename:="Z:\expedientes_excel_servidor\expedientes_comunes.xlsx"
Range("A1000000").End(xlUp).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.Workbooks("Z:\expedientes_excel_servidor\expedientes_comunes.xlsx").Close SaveChanges:=True

En el código anterior se me presenta un escollo final INESPERADO, línea final: el cierre de un fichero que en el mismo evento he abierto y copiado en él determinados datos.

Al ejecutarlo paso a paso salta un error en la línea final: "error 9, subíndice fuera del intervalo" ¿?

Respuesta
1

Pruebe sustituyendo

Application.Workbooks("Z:\expedientes_excel_servidor\expedientes_comunes.xlsx").Close SaveChanges:=True

por

Application.Workbooks("expedientes_comunes").Close SaveChanges:=True

En efecto, Poliplos!!!    :-)

Se me escapa la razón pero con el cambio ha funcionado perfectamente, bien es verdad que al final me ha seguido enviando el mensaje de error 9, pero la macro había hecho su trabajo: ha copiado, ha abierto, ha pegado y ha cerrado.

Finalmente he añadido la extensión '.xlsx' al fichero a cerrar y miel sobre hojuelas: no se me ha enviado ni el mensaje de error!!!

Genial Poliplos, un millón de gracias.  : - )

No hay de qué!

Se debe a que en la colección Workbooks no se almacena el archivo con toda la ruta. Sólo el nombre del archivo. He escrito la respuesta de memoria y, sinceramente, no tenía claro si la extensión se almacenaba o no. Si le daba error sin extensión, pero ya no con la extensión, perfecto.

1 respuesta más de otro experto

Respuesta
2

Intenta con una variable.

Pongo comentarios en las líneas para mejor entendimiento:

Sub test()
  'declaras un objeto como libro:
  Dim wb As Workbook
  '
  Worksheets(7).Select
  Range("A1000000").End(xlUp).Offset(0, 0).EntireRow.Copy
  '
  'estableces el objeto con el libro a abrir:
  Set wb = Workbooks.Open(Filename:="Z:\expedientes_excel_servidor\expedientes_comunes.xlsx")
  '
  Range("A1000000").End(xlUp).Offset(1, 0).Select
  ActiveCell.PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  '
  'cierras el libro sin necesidad de escribir nuevamente el nombre
  wb.Close SaveChanges:=True
End Sub

¡Gracias! ¡Gracias! Dante.

Saludos.

Simplificando el código, quedaría de esta manera.

No es necesario seleccionar las celdas, ni la hoja, por ejemplo:

Sub test()
  'declaras un objeto como libro:
  Dim wb As Workbook
  '
  Application.ScreenUpdating = False
  Worksheets(7).Range("A" & Rows.Count).End(xlUp).EntireRow.Copy
  '
  'estableces el objeto con el libro a abrir:
  Set wb = Workbooks.Open(Filename:="Z:\expedientes_excel_servidor\expedientes_comunes.xlsx")
  '
  Range("A1000000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  '
  'cierras el libro sin necesidad de escribir nuevamente el nombre
  wb.Close SaveChanges:=True
End Sub

Conoce más sobre las mejores prácticas para programar en VBA.

Te invito a Suscribirte a mi canal de youtube:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas