Como guardar la información de una hoja de excel a la ultima hoja vacía. (Macro)

Buenos días, sigo molestando :(

tengo un archivo de excel el cual contiene una macro que carga un reporte diario en la primera hoja del libro, lo que busco es que cuando cargue ese reporte me lo copie en la ultima hoja vacía asignándole por ejemplo Día 1, el siguiente reporte deberá guardarse en la hoja siguiente y llamarse Día 2 y así sucesivamente, es posible hacer esto? Lo requiero así porque después agregare un combobox que me abra en la hoja 1 el Día x, que yo necesite.

Agradecería si ayuda.

Respuesta
1

Lo que se puede agregar a tu macro es que luego de cargar el reporte a la 1er hoja 'agregue' una nueva hoja al libro. Porque revisar las hojas hasta encontrar una vacía parece un proceso engorroso y poco óptimo.

Para desarrollarte este módulo, debes aclarar si la carga será igual en las 2 hojas y cómo sabrá Excel qué nombre asignarle a la nueva hoja que se va a crear. Deja tu macro escrita aquí para completarla.

Le mando por correo mi macro, es algo extensa, ya que hace otras cosas je je..

Pero para aclarar, la carga si debe ser igual en las dos hojas, solo que cada día carga un reporte nuevo, entonces deberá agregar una hoja nueva por cada reporte.

ah olvide mencionar que debe dejar guardado todos los reportes que se cargaron días anteriores.

Te dejo la macro que crea la hoja a imagen y semejanza de la hoja Reporte diario.

Te envié el libro para que decidas en qué momento harás esta copia.

Falta que definas qué variable o celda dará nombre a la hoja.

Sub copiarDiario()
'x Elsamatilde
    Sheets("AVANCE DE ACTIVIDADES").Copy After:=Sheets(Sheets.Count)
    Sheets("AVANCE DE ACTIVIDADES (2)").Select
    'contemplo posible error de nombre repetido o inválido
    On Error Resume Next
    Sheets("AVANCE DE ACTIVIDADES (2)").Name = "DIA 3"    'atención: dar nombre con variable
    'quita el botón ----> opcional
    ActiveSheet.Shapes.Range(Array("Button 1")).Select
    Selection.Delete
Range("A1").Select
End Sub

Si se presenta un error al intentar darle nombre a la hoja nueva quedará como AVANCE DE ACTIVIDADES (2) ..... y tendrás que nombrarla manualmente.

¿En este caso selecciona el rango inicial o selecciona ya con el formateo verdad?. ¿En caso de querer el rango original sin formateo que tendría que cambiar?.

La macro lo que hace es una 'copia' de la hoja y luego la renombra (no olvides aclararme de dónde tomar el dato para el nombre de la hoja y así te ajusto la instrucción).

Es lo mismo que hacemos con clic derecho sobre la pestaña, opción Mover o copiar.

Por lo tanto la copia diaria tendrá el formato o la estructura de la hoja ACTIVIDADES dependiendo en qué momento la ejecutas. En tu libro dejé marcada 3 momentos posibles a mi entender.

La primera sería con la estructura tal como viene de la captura... pero como no tengo el libro de captura no puedo darme cuenta de cómo se ve la hoja ACTIVIDADES inicialmente.

Si no te cierra la idea, enviame en el mismo libro cómo queda la hoja ACTIVIDADES luego de todo el proceso y cómo necesitas ver la hoja de cierto día.

Cheque lo que me mando, el bloque quedo en el 2 momento, ya que en los otros me trae información que no requiero.

No encuentro una forma de ir renombrando las hojas siguientes que se vayan a ir creando con un reporte diario. Ya que no cuento con un campo que contenga la fecha del día del reporte, hablando del archivo original sin formateo.Lo que se me ocurre es poner una celda en el archivo ya formateado con la fecha en que se cargo el reporte, para que así el nombre de la hoja sea la fecha de la carga del reporte.

Si vas a guardar la fecha en que se carga el reporte podes hacer uso de la fecha del sistema. Así quedaría entonces la instrucción de la subrutina 'cargarDiario':

Sheets("AVANCE DE ACTIVIDADES (2)").Name = "DIA " & Day(Date) 

Otro modo es solicitando, al inicio del proceso principal de captura, el nro de día. Esta tarde te envío tu libro con esta opción para que la pruebes.

Sdos!

La rutina del botón Reporte debe empezar así para solicitar el nro de día que se guardara en la variable definida al inicio:

Public nrodia As Byte
Sub Botón1_Haga_clic_en()
'--------agregado x Elsamatilde para solicitar el nro de dìa
nrox = InputBox("Ingresa nro de dia para la hoja copia de reporte.", "SOLICITUD")
If nrox < 1 Or nrox > 31 Then
    MsgBox "No es un nro valido."
    Exit Sub
End If
nrodia = Val(nrox)
'---------------
'aqui siguen tus instrucciones

Y la linea de la subrutina que guarda la copia quedarìa asi:

    Sheets("AVANCE DE ACTIVIDADES (2)").Name = "DIA " & nrodia    'atención: variable publica ubicada en mod del boton reporte

Sdos!

ya lo acomode y me queda perfecto..

una ultima pregunta..con el código de "copiar diario" es posible  mandarlo llamar con un combobox y así poder verlo de nuevo en la hoja de Avance de Actividades y en la de Avance por Departamento, verdad?

¿No te comprendo... qué querés ver de nuevo? Los combobox generalmente son para 'elegir' algo no para llamar a una macro (salvo excepciones)... aclarame un poco lo que intentas hacer.

Sdos!

Buenos días, lo que quiero hacer es agregar un combobox a mi hoja de Avance de Actividades, en el cual yo tenga la opción de elegir el reporte de Día x, y que con esa información me llene la hoja de Avance de Actividades y la de Avance por Departamento. No quiero que llame la macro, sino que me traiga la información del reporte original sin formateo y que de ahí me la muestre en estas dos hojas antes mencionadas. Es posible?

Bien, pero esto es otro tema diferente. Por favor finaliza esta consulta que según tus comentarios está resuelta esta parte (... ya lo acomode y me queda perfecto..) y lo seguimos en otra nueva.

Sdos

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas