Macro que no deje borrar ciertos valores de un rango.

Hola Amigo Tavopz, espero no sea molestia consultarle una cosa más que estoy intentando hacer.
No se si se podría elaborar una macro cuya función sea que los datos de cierto rango no los permita borrar y muestre un userForm o un MsgBox algo por el estilo, solcitando una clave para acceder.
Ejemplo, Los datos que se muestran en el rango de la hoja de excel C3 hasta C1000 no se dejen borrar solo si le introduces una clave... Pero el resto de celdas si se pueden modificar normal, que la macro solo afecte a ese rango C3:C1000.
Es decir, en el rango C3:C1000 puedo ingresar datos pero no los podría borrar, solo hasta cuando le introduzca una calve de acceso mediante un UserForm o algo por estilo...
Le agradezco de corazón su colaboración.
Att;  Luis

1 Respuesta

Respuesta
1
No has pensado hacerlo con protección de la hoja.
Cuando usas esta alternativa (del menú Herramientas/Proteger/Proteger hoja...) es posible proteger una hoja y seleccionar un rango de celdas que pueden ser modificadas por los usuarios y otros que no.
Para designar cuáles celdas pueden ser modificadas, las seleccionas e ingresas por el menú Formato/Celdas en la pestaña "Protección" y des-seleccionas Bloqueado (Locked), de esta forma tendrás protegidas las celdas que deseas que no se modifiquen y las demás podrán ser cambiadas sin problema.
Si esa es una buena alternativa, pero realmente lo que me gustaría hacer es:
Cuando haya una acción en ese rango, por ejem Suprimir, cuando se oprima el botón Suprimir la macro me muestre un Mensaje, diciendo: No puede borrar el dato! Y devuelva el dato que estaba en ese rango, que la macro se accione cuando se presione Supr, ...
La idea no es Proteger la hoja... la cuestión que la macro me active un rango, y que en ese rango puedas ingresar datos normalmente, pero cuando hagas la acción Suprimir en cualquier celda de ese rango, no deje.
La idea es que mis compañeras puedan ingresar datos y usar el filtro y todo eso, pero que no puedan eliminar cierto campito de la hoja, pues cuando bloqueas la hoja no funciona el filtro, y si activas ciertas celdas no bloqueadas, el usuario puede ingresar y borrar datos de ese rango.
Yo estaba intentando hacerla pero todavía soy novato en Código y me equivoco en las declaraciones... Agradezco su colaboración Tavopz
Ok, entonces se me ocurre utilizar el evento Change de la Worksheet, algo como esto:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C3:C1000")) Is Nothing Then
          x = InputBox("Ingrese la clave")
         If x "abcd" Then
                MsgBox ("Clave no válida")
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
                GoTo fin
        End If
     End If
fin:
End Sub

Desde luego la contraseña quedará en el código (en este ejemplo es "abcd"), si la contraseña ingresada es diferente a esta entonces se deshace el cambio y queda como antes.
Excelente, se ve bien... ¿pero cómo hago para que se auto-ejecute cuando se abra la hoja?
No he podido probarla, pues imagino debería autoejecutarse...
Sr. Tavopz Como hago para autoejecutarla...¿?
Gracias por su colaboración.
Copia el código que te envié en la hoja de cálculo donde necesitas se haga la tarea.
Abre el archivo y dale clic derecho sobre el nombre de la hoja y selecciona ver código, allí pegas el código.
Luego, para probarla, simplemente cierra el editor de Visual Basic y trata de modificar una celda en el rango C3:C1000 y verás el resultado. Si de entrada no te funciona o no pasa nada, cierra el excel (guardando los cambios) y abre nuevamente la hoja de cálculo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas