¿Cómo puedo crear un botón para añadir filas en pestañas protegidas?¿Se pueden crear filas de manera automática?

Estoy trabajando con una herramienta Excel la cual genera un informe. Se trata de una encuesta en la que determinadas personas deben indicar su modelo de coche y la distancia recorrida. En todo momento el archivo está protegido y sólo se puede escribir en determinadas celdas.

Mi problema está en que he colocado un número de filas = 10. Lo que quiero conseguir es que si se han rellenado el número total de filas pero todavía queda gente por contestar, se generen nuevas filas de forma automática con las mismas propiedades que las anteriores. Todo ello, como he dicho, sin desproteger la hoja. No me sirve de solución poner desde un primer momento más filas porque necesito que la herramienta quede estética, pues me lo han pedido así. Además, las encuestas pueden hacerse desde una plantilla de 10 personas a otra de 1000, y ésta necesita ser impresa, por lo que no quedaría bien en una encuesta de 10 personas que se mostrasen 990 celdas vacías.

Como he puesto en el título, he leído que también puede abordarse el problema poniendo un botón, el cual si se pueda acceder aunque la pestaña esté protegida, que te genere más filas, ¿es posible?

Respuesta
2

El modo de trabajar en hojas protegidas es que la misma macro la desproteja y vuelva a proteger al final. Como hay muchas maneras de insertar filas (manteniendo formatos, fórmulas, por rangos, etc) aquí solo dejo ejemplo de cómo trabajar con hoja protegida que es el tema de tu consulta.

Ejemplo: aquí se insertan 10 filas a partir de la fila 21 manteniendo el formato de la 20.

Sub insertaFilas()
' x Elsamatilde
'se desprotege la hoja
ActiveSheet.Unprotect "tu_clave"
'instrucciones para insertar. X Ejemplo:
    Rows("21:30").Insert Shift:=xlDown
    Range("A20").Select
'volver a proteger
ActiveSheet.Protect "tu_clave"
End Sub

Suguramente querrás insertar rangos con cierto diseño o formato y en ese caso encendé la grabadora (desde menú Macros) copiá el rango que quieras repetir hacia abajo y al posicionarte en la primer fila de destino clic derecho y opción 'Insertar celdas copiadas'.

Al detener la grabadora encontrarás en un módulo las instrucciones necesarias.

Si necesitas luego más ayuda con este tema valora esta respuesta e inicia otra nueva en el tablón con imagen de tu hoja y las filas que deseas insertar con la macro generada para ajustarla.

Me ha sido de gran ayuda.

Sin embargo ahora me ha surgido otro problema. Al añadir la primera fila todo funciona correctamente, pero cuando quiero añadir una segunda, esta se crea, en lugar de en el último punto, en el primer punto designado. De esta forma se crean continuamente en la fila (p.ej.) 23:

Sub Macro1()
'
' Macro1 Macro
'ActiveSheet.Unprotect "tu_clave"

'
Range("B23:H23").Select
Selection.Insert Shift:=xlDown
Range("B24").Select

ActiveSheet.Protect "tu_clave"
End Sub

¿Cómo puedo hacer que el rango que utilice sea el de la última fila rellena?

Gracias de antemano,

Pablo.

Hola de nuevo, también tengo un problema con un dato que hace la suma de una columna determinada. Aunque al grabar la macro hago el incremento en dicha celda, esta no se actualiza y al ejecutar la macro, todo funciona bien menos el valor total.

Te adjunto la imagen, ya que el fichero no puedo. La celda a la que hago referencia es la I13. Las demás columnas son las que se agregan y las que se suman son las H.

Gracias de antemano,

Pablo.

Para que no tengas que actualizar la fórmula ante cada fila insertada lo mejor es que tengas una fila con todos los formatos, vacía y oculta.

En la imagen podrás observar la fila 23 que está incluída en la fórmula pero que luego la oculté antes de utilizar la macro.

Y la macro quedaría así:

Sub insertaFila()
'x Elsamatilde
'ActiveSheet.Unprotect
'ultima fila ocupada + la oculta
fini = Range("E" & Rows.Count).End(xlUp).Row + 1
    With Range("B" & fini).EntireRow
        .Select
        .Hidden = False
        .Copy
    End With
    Range("B" & fini).EntireRow.Insert Shift:=xlDown
    Application.CutCopyMode = False
    'oculta la vacía
    Range("B" & fini + 1).EntireRow.Hidden = True
ActiveSheet.Protect
End Sub

Observa que tomo como fin de rango la col E que es la que observo con datos.... puede ser cualquier otra pero debe ser una con datos.

Es importante que siempre la última fila quede oculta.

Sdos!

¡Gracias! Ha sido de gran ayuda.

Realmente me tiene enganchado esto de la programación en VBA de Excel, sólo hace una semana que lo descubrí. (De ahí mis dudas tan básicas).

Hay mucho material para comenzar en la sección Macros de mi sitio, también ejemplos para descargar, blog y videos y por supuesto el manual 500Macros para tener todo en un solo lugar: tu equipo.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas