Guardar hojas de libro excel en carpetas diferente

Hola. Estoy elaborando un libro de excel de 23 hojas(una por cliente) en las que quisiera llevar el registro de ventas diario, y quisiera saber si es posible generar un botón en cada hoja, que al oprimirlo guarde unicamente la hoja activa, dándole al nuevo archivo como nombre el contenido de la celda "A1''(nombre del cliente) más la fecha del sistema, de tal manera que las hojas independientes se vayan guardando en carpetas separadas(1 por cliente)
Agradeceré bastante me puedan ayudar

1 respuesta

Respuesta
1
Te dejo una rutina extraída de mi manual 400MacrosPlus (*)
Entrás al Editor, insertás un módulo y allí la copias. Luego dibujá en tu hoja el botón para asignarle esta rutina.
Sub guardacopia()
Dim nbre As String
activesheet.Range("A1").Select
nbre = ActiveSheet.Range("A1") & date  'ajustar la cadena (**)
ActiveSheet.Copy
Set wb = ActiveWorkbook
With wb
'guardamos el libro en la misma carpeta y con nombre = variable
.SaveAs Filename:=ThisWorkbook.Path & "\" & nbre & ".xls", _
FileFormat:=xlText, CreateBackup:=False
'cerramos el libro
.Close True
End With
'se libera el objeto
Set wb = Nothing
End Sub
El libro se crea en la misma carpeta que el libro activo u original (ThisWorkbook. Path)
(**) Tené presente el formato de la fecha de tu sistema, para que sea un nombre válido de libro
Pruébala y si todo resulta según lo esperado no olvides finalizar la consulta
(*) Encontrarás otros temas desarrollados en la demo (gratuita y sin registración) que podes descargar desde:
http://es.geocities.com/lacibelesdepunilla/manuales
Excelente funciono muy bien, el único problema es que me guarda las copias en la misma carpeta, ¿es posible mandar cada una de las copias a una carpeta diferente? ¿Es decir a la carpeta de su respectivo cliente? Y que en las copias no aparezca el botón que puse en el original es decir solo el rango (A1:I31)
Muchas gracias por tu ayuda
Si el nombre de la carpeta se corresponde con algún dato del libro (en esa hoja o en otra), reemplazá la expresión ThisWorkbook. Path por ese dato.
El tema es que necesitas la ruta. Podrás guardarla en alguna celda auxiliar, por ej:
Hoja1, Z1 = C:\Documentes & Settings\All Users\Documentos\
Y en otra celda el nombre del cliente, por ej: Hoja1, B5
Entonces la cadena será:
nbre = sheets("Hoja1").range("Z1") & sheets("Hoja1").range("B5") & "\" & activesheet.range("A1") & date & ".xls"
Y lo guardarás como:
. SaveAs Filename:=nbre ' lo demás no va, por error te dejé formato txt.
Para que no se guarde la copia con el botón, agregá las líneas entre las 2 que dejé en negrita
With wb
ActiveSheet.Shapes(1).Select
Selection.Delete
'guardamos ...
Excelente resulto muy bien, había tratado de hacerlo de otro modo más complicado y lo que me dices resulto bastante sencillo.
Unos últimos detalles, abusando un poco de tu valiosísima ayuda me gustaría, que al guardarse la copia se elimnara el fondo de color que le puse en las columnas (C, E, I) pues se presta a confusiones al tener los dos abiertos(original y copia). Y que se eliminara otro botón que puse en la parte superior de la columna b, el cual borra el contenido de dicha columna.
Muchas gracias y disculpa tanta molestia.
wow creo que lo logre, investigano por ahí y con un poco de intuición logre eliminar el otro botón y cambiar el color de las celdas
solo que hay un problema si no hay nada escrito en la celda A1 ocurre un error.
¿Supongo qué esto se arregla con un msg box no? Solo que no se como hacer para que esto suceda es decir que al momento de querer guardar la copia aparezca un mensaje que diga
"No hay nombre en la celda A1" e interrumpa el proceso de guardar la copia
Espero me puedas ayudar gracias.
Así empezará la rutina entonces, agregando las líneas de control:
Sub guardacopia()
Dim nbre As String
activesheet.Range("A1").Select

if isempty(activecell) OR activecell.value = 0 then  'opcional la parte del 0
msgbox "La celda A1 está vacía, el proceso se cancela"
exit sub
end if
nbre = ActiveSheet.Range("A1") & date 'ajustar la cadena (**)
'siguen tus líneas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas