Saltar al contenido

CREAR HOJAS EXEL DESDE BASE DE DATOS


Recommended Posts

publicado

Buenas tardes.

Estoy buscando ayuda con una hoja de exel que tiene base de datos.

Quisiera una macro en la cual pueda crear una nueva hoja exel según el numero de registro, solo quiero que se cree una copia del área de impresión (B1:J70) , y que al crear la nueva hoja esta se cree sin formula solo con datos y que no se pierda el formato.

Ejemplo. en la casilla L6 yo introduzco los numero de registro y al cambiar este numero me cambia los valores que llama de la base de datos que están desde la fila 77.

Si alguien me puede ayudar por favor.

Adjunto mi hoja en exel, muchas gracias.

PLANILLA DATOS.rar

publicado

Hola.

En lo particular no me gustan las celdas combinadas son una lata.

Lo que te puedo proponer es lo siguiente:

Inserta dos módulos, en el primero pega este código

Sub copiarHoja()
    Dim nombreHoja As String
    Dim contador As Integer
    contador = 1
    nombreHoja = Sheets("CLASIFICACIÓN").Range("L6").Value
    Do While Existe(nombreHoja)
        contador = contador + 1
        nombreHoja = Sheets("CLASIFICACIÓN").Range("L6").Value & " " & contador
    Loop
    Sheets("CLASIFICACIÓN").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = nombreHoja
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    eliminarFueraDeRango
End Sub

Function Existe(nombre As String) As Boolean
    Dim hoja As Worksheet
    On Error Resume Next
    Set hoja = Sheets(nombre)
    On Error GoTo 0
    If hoja Is Nothing Then
        Existe = False
    Else
        Existe = True
    End If
End Function

En el segundo este

Sub eliminarFueraDeRango()
    Dim rango As Range
    Set rango = ActiveSheet.Range("B1:M71")
    With ActiveSheet.UsedRange
        .Offset(rango.Rows.Count).Clear
        .Resize(, rango.Column - 1).Clear
        .Offset(, rango.Columns.Count + rango.Column - 1).Clear
    End With
End Sub

El primero copia y pega todo, el segundo limpia el excedente. Si te interesa que se quede igual entonces solo pega el primer módulo y elimina el llamado del segundo.

Saludines.

 

publicado

Nota:

La decisión de si limpias los datos o no repercute en el gráfico, por eso es importante. Como tienes el área de impresión ya definida tal vez conviene dejarlo así para que no te quede en 0 pero te dejo la opción a ti. Es lo que puedo aportar, aunque sin duda algún Maestro podría pasar y proponer un código más simple.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.