Macro permitir editar rangos excel

Al proteger una hoja, quiero que de una tabla editar unas columnas específicas. En concreto serían 3 contiguas y una en otro lado.

El Protection. AllowEditRanges quiero que se haga en un sólo nombre si es posible y no tener un montón de rangos ya que son varias tablas.

1 respuesta

Respuesta
1

Espero poder ayudarte

Te comparto algunos códigos a ver si te funcionan

Este código te desbloquea y te bloquea la hoja1 y deja libre la celda A1

Sub bloquea_hoja_con_1_celda_desbloqueada()
Sheets("Hoja1"). Unprotect 'coloca el nombre de tu hoja
Range("a1").Locked = False 'desbloquea una celda y la puedes utilizar
Sheets("Hoja1"). Protect 'coloca el nombre de tu hoja
End Sub

este código te desbloquea y bloquea la hoja1 y deja libre el rango a1:a10

Sub bloquea_hoja_con_1_rango_desbloqueado()
Sheets("Hoja1"). Unprotect 'coloca el nombre de tu hoja
Range("a1:a10").Locked = False 'desbloquea el rango y lo puedes utilizar
Sheets("Hoja1"). Protect 'coloca el nombre de tu hoja
End Sub

Ahora si no quieres usar macros.. puedes seleccionar tu rango que necesites

Das clic derecho, seleccionars FORMATO DE CELDAS

Ventana "proteger" y le quitas la palomita o un recuadro en negro a la casilla de BLOQUEDA

Luego protejes tu hoja y listo

No olvides valorar

en una hoja la bloqueo como dices 

sheets("Hoja1").UnProtect "CONTRASEÑA"

Ahora lo que quiero es que cuando esté bloqueada la hoja pueda escribir en unas celdas específicas sin necesidad de hacer ninguna macro o desbloquear la hoja por completo.

ActiveSheet.Protection.AllowEditRanges.Add Tittle:="CELDAS EDITABLES" Range:= (Aquí tengo el problema para seleccionar las columnas de la tabla)

En el rango lo pongo como si fuese una ListObjects("ER").Listcolumns(1).DataBodyrange.Resize(, 3), pero no funciona

Se que podría hacerlo por Cells, pero no quiero ya que la primera casilla de la tabla podría ser más abajo, tengo otra tabla arriba con las mismas dimensiones y puede que la primera casilla ya no sea. Si sólo fuese una tabla única en la hoja podría hacer una variable de contar, para obtener el rango.

luego se que iría la protección de hoja

Sheets("Hoja1").Protect ·"CONTRASEÑA"

Lo quiero hacer por tabla, ya que esa tabla se va agrandando cada vez más

¿

¿Ah ok
es una tabla dinámica?

¿Los rangos qui quieres desporteger
son movibles según tu tabla o tus datos?

Son movibles porque se puede añadir filas en la tabla de arriba e incluso en la misma tabla desde un formulario

He conseguido avanzar un poco poniendo esto en Range

Range:=( [tabla1[[columna1]:[columna5]]])

pero tengo otra columna más que añadir pero si pongo otra columna me da error, creo que es porque lo estoy haciendo mal al añadir la columna suelta. 

me faltaría poner la [Columna6], pero no sé como añadirlo en el Range. Me da error todo el rato diciendo que no coincide los tipos. Lo que he puesto al principio funciona perfectamente

Con saber como hacer esa parte ya estaría resuelto

A ver pruébate con esto

Option Explicit
Sub ProtegerYActualizar()
Dim td As PivotTable
Worksheets("Hoja2").Protect Password:="1234", UserInterfaceOnly:=True, AllowUsingPivotTables:=True
'Sheets("Hoja2").PivotTables("TablaDinámica1").RefreshTable
For Each td In ActiveSheet.PivotTables
    td.RefreshTable
Next td
End Sub
Sub Desproteger()
Worksheets("Hoja2").Unprotect Password:="1234"
End Sub
Sub ActualizarTD()
Sheets("Hoja2").PivotTables("TablaDinámica1").RefreshTable
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas