Hola Buenos días por favor necesito una macro para guardar la hoja "report", con el nombre de la celda "C3", deberá guardarse en la unidad "C", en la carpeta llamada "reportes pn", y cada vez que la guarde lo hará como una hoja diferente para no borrar la anterior. De antemano te agradezco mucho, saludos
Vamos a ver entiendo cuando dices "Hoja" te refieres al Libro de Excel que en tu caso el nombre sería "Report.xls", quieres guardarlo en la ruta: C:\Reportes pn\Nombre de la celda C3.xls pero para no borrar el anterior, por ejemplo podemos numerar correlativos, quedando así: C:\Reportes pn\Nombre de la celda C3.xls C:\Reportes pn\Nombre de la celda C3-1.xls C:\Reportes pn\Nombre de la celda C3-2.xls C:\Reportes pn\Nombre de la celda C3-3.xls Podríamos añadirle la fecha del sistema algo así: C:\Reportes pn\Nombre de la celda C3-1-08-07-2009.xls Tenemos que mantener los correlativos porque si guardas el libro más de una vez en un día se borraría el anterior. De todas formas te doy las dos macros esta es solo con correlativos: Sub Auto_Close() Dim contador As Integer Application.DisplayAlerts = False If Range("IV65536").Value = "" Then Range("IV65536").Value = 1 End If contador = Range("IV65536").Value NombreArchivo = ActiveSheet.Range("C3").Value ChDir "C:\reportes pn" ActiveWorkbook.SaveAs Filename:= _ "C:\reportes pn\" + NombreArchivo & "-" & contador & " .xls", FileFormat:=xlNormal _ , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Range("IV65536").Value = contador + 1 End Sub En la ultima celda de la hoja he puesto el valor del contador "IV65536" (espero que no la utilices, si es así cambiala a otra) al cerrar el libro automáticamente se guardará en la carpeta que has puesto con un numero ordinal consecutivo, necesitamos una celda con el numero que hace de Libro guardado, porque las variables al cerrar el Libro pierden el dato y en algún sitio hay que tenerlo, si quieres esa celda ponle el color de texto en blanco y así no te molesta ni se vé. Ahora en la celda de encima "IV65535" voy a poner la fecha del sistema para la siguiente macro que pondrá el nombre ordinal concatenado con la fecha: Sub Auto_Close() Dim contador As Integer Dim fecha As String Application.DisplayAlerts = False If Range("IV65536").Value = "" Then Range("IV65536").Value = 1 End If Range("IV65535").Select ActiveCell.FormulaR1C1 = "=Now()" ActiveCell.NumberFormat = "dd-mm-yyyy" fecha = ActiveCell.Text Range("A1").Select contador = Range("IV65536").Value NombreArchivo = ActiveSheet.Range("C3").Value ChDir "C:\reportes pn" ActiveWorkbook.SaveAs Filename:= _ "C:\reportes pn\" + NombreArchivo & "-" & contador & "-" & fecha & " .xls", FileFormat:=xlNormal _ Range("IV65536").Value = contador + 1 End Sub Elige la que más te guste, y si te ha servido puntúa y finaliza la consulta. Gracias. >Un saludo >Julio
Hola!, todo esta genial, pero te aclaro algo, es que el libro tiene muchas hojas y no quiero guardarlo todo, solamente la hoja "report". Nuevamente GRACIAS!...
Vale pues no entendí tu consulta entonces no es posible guardar el libro porque se guardaría completo, para hacer esto hay que crear un Libro nuevo copiarle y pegarle la hoja que deseas darle el nombre guardar los datos y cerrarle, te dejo la nueva macro solo con los valores de números consecutivos si quieres hacerlo también con la fecha fíjate en las lineas que he añadido y tan solo modifica las necesarias para añadir la fecha: Sub Auto_Close() Dim contador As Integer Application.DisplayAlerts = False If Range("IV65536").Value = "" Then Range("IV65536").Value = 1 End If contador = Range("IV65536").Value NombreArchivo = ActiveSheet.Range("C3").Value Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.PasteSpecial ActiveSheet.Name = "report" Sheets("Hoja2").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.Delete Sheets("Hoja3").Select ActiveWindow.SelectedSheets.Delete Range("A1").Select ChDir "C:\" ActiveWorkbook.SaveAs Filename:= _ "C:\" + NombreArchivo & "-" & contador & " .xls", FileFormat:=xlNormal _ Range("IV65536").Value = "" If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close Range("IV65536").Value = contador + 1 Range("A1").Select End Sub >Un saludo >Julio PD: Si ya te sirve puntúa y finaliza la consulta, un comentario es bienvenido.