Proteger el contenido de ciertas celdas sin proteger la hoja de trabajo

Proteger el contenido de ciertas celdas sin proteger la hoja de trabajo

Tenemos un libro de Excel 2016 con varias pestañas, cada pestaña está dedicada a un vendedor específico. Cada vendedor, inicio de sesión desde un formulario y su (solo su) hoja de trabajo está desbloqueada y permite editarla.

Hay una tabla que muestra sus datos anteriores. Se le permite actualizar o cambiar la mayoría de sus datos en la tabla. Actualiza celdas específicas, guarda y cierra el libro de trabajo. El proceso de cierre de wb, vuelve a bloquear su hoja. Antes de irse, puede mirar otras hojas de vendedores, pero no puede editarlas porque están bloqueadas.

Ahora el problema. En cada una de las hojas de vendedores, ciertas columnas (las mismas para todos los vendedores) contienen datos ingresados ​​por un administrador. Estos datos deben ser vistos por los vendedores pero no deben ser alterados.

Cualquier idea sobre cómo proteger ciertas columnas del contenido existente cambia en una hoja de trabajo desprotegida.

Respuesta1

Sin ver el código VBA, es difícil determinar cómo se produce el bloqueo/desbloqueo. Supongo que se hace configurando el lockedatributo de una celda y usando la función de protección y desprotección de la hoja de trabajo.

Lo que tendría que hacer es seleccionar todas las ventas que se permiten editar y crear un rango personalizado para ellas. No tengo Excel a mano, pero creo que sí. Data> Define Custom RangeDesde la misma ubicación puedes seleccionar un rango, que seleccionará automáticamente las celdas en Excel.

Como alternativa a trabajar con rangos personalizados, puede seleccionar las columnas necesarias, dado que los datos del administrador no están en la misma columna. Eso permitiría que una activesheet.range("K:L").selectsea posible.

En el código VBA, después de desbloquear la hoja de trabajo, debe seleccionar este rango y modificar la lockedconfiguración de estas celdas, luego proteger la hoja nuevamente. Se debe hacer lo contrario al salir (desproteger, bloquear todo, proteger).

Para descubrir el código VBA adecuado, realice la acción manualmente mientras graba en una macro y copie el código.

Respuesta2

LPChip me puso en el camino correcto y se lo agradezco mucho. El proceso que utilicé es el siguiente:

  1. en la hoja del vendedor, establezca el atributo de bloqueo para toda la hoja como falso
  2. en la mesa para ese vendedor, establezca el atributo de bloqueo para la tabla completa como verdadero
  3. Creamos un rango personalizado, como sugirió LPChip, de todas las columnas que no queríamos que nadie pudiera editar. Hizo esto manualmente y asignó un nombre de rango (LockedColumns).
  4. luego protegí la hoja, esta es la condición inicial para esta hoja y todas las demás hojas de vendedores.

  5. El vendedor inicia sesión y, con las credenciales correctas, es llevado a su hoja donde ocurre lo siguiente en código vba detrás de escena:

    • Seleccionamos la tabla y configuramos el atributo de bloqueo en falso.
    • Seleccionamos el Rango. ("LockedColumns"). Seleccionamos y configuramos el atributo de bloqueo en verdadero.
    • Protegemos la hoja de trabajo.

Esto permite que el vendedor autorizado ingrese datos en las celdas que permitimos y evita que cambien datos en las celdas en las que no queremos cambios. El vendedor puede mirar otras pestañas de ventas pero no modificarlas. Cuando el vendedor cierra la sesión o se cierra el libro de trabajo, capturamos antes del cierre y en el código vba, 1. seleccionamos la tabla completa nuevamente, configuramos el atributo de bloqueo en verdadero y luego protegemos la hoja de trabajo. Guardamos y luego redirigimos nuevamente a la pestaña del menú para el siguiente usuario.

Me quedé perplejo y LP me abrió los ojos. Gracias de nuevo.

información relacionada