evitar que modifiquen cantidades en un rango y a la vez permitir que apliquen color de fondo a las celdas..

Samuel Cano

Board Regular
Joined
Jun 24, 2002
Messages
62
Saludos amigos.

Permítanme consultarles: cómo sería posible impedir que se modifique el contenido de un rango pero al mismo tiempo, permitir que se pueda aplicar color de fondo a las celdas del mismo rango?

He leído los mensajes de proteger pero no consigo una pista..

Intenté proteger, pero no permite aplicar color una vez protegido.

Solo necesito que se rechacen los cambios a las celdas en el rango y que se pueda resaltarlas coloreandolas.

Como siempre gracias anticipadas desde México.
 

Excel Facts

Excel Wisdom
Using a mouse in Excel is the work equivalent of wearing a lanyard when you first get to college
Samuel,

Si usted tiene Excel XP, 2003 o 2007, Usted pone protección como siempre pero cuando está poniéndola, haga un "cheq" en la tercera caja en el listado de actividades permitos que es "formatear celdas". No tengo accesso a Excel 2000, pero no creo que ofrezca esas opciones.

Saludos,
 
Upvote 0
Si utilizas Excel 2000 o previo, puedes intentar este artilugio, que no hace "exactamnete" lo que pides, pero aproxima bastante, en el Modulo de la hoja:
Code:
Option Explicit
Dim valor

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Rango")) Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Target.Value = valor
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("Rango")) Is Nothing Then
valor = Target.Value
End If
End Sub
 
Upvote 0
Salud Greg, Galileo.. gracias por el apoyo..

Les cuento que el caso que expuse, fué para mi, muy apremiente.

Y que en mi apuración consulté a varios libros, uno de ellos con el código que me sirvió de modelo para el que incluyo a continuación (por si de algo sirve a alguien).

Lo que hace es evitar el cambio de valores en las celdas del rango definido. Permite colorear la celda (lo que yo que buscaba), borrar su contenido y otras acciones más como por ejemplo pegarle un valor copiado de otra celda.

Refrendo mi agradecimiento para con ustedes. Y les comento que a manera de corresponder sus atenciones, siempre que puedo sigo su ejemplo compartiendo mi limitado conocimiento del VBA.

Un abrazo.

- Samuel

P.D. La sugerencia y el código los reviso y, (no podía ser de otra manera) los integro a mi biblioteca de consulta. Gracias. :P


Code:
Private Sub Workbook_Open()

    bolResp = MsgBox("Para continuar, dé click en el botón 'Aceptar'", vbExclamation + vbOKCancel, "Por favor..")
    
    If bolResp = 2 Then
    
        Application.DisplayAlerts = False
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close
        
    Else
    
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
    
        Hoja1.Visible = xlSheetVisible
        Worksheets("Hoja1").Visible = xlSheetHidden
    
    With Cells.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
        .IgnoreBlank = False
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
    
    
    lngFila = 36
    
    
    With Range("A9:V" & lngFila).Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="="""""
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "Alto!"
        .InputMessage = ""
        .ErrorMessage = "En este cuadro no cambiar " & vbNewLine & _
                        "cantidades, solo aplicar color." & vbNewLine & vbNewLine & _
                        "presione Esc para continuar..."
        .ShowInput = True
        .ShowError = True
    End With

    Range("B" & lngFila).Select

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End If

End Sub
 
Last edited:
Upvote 0
Greg, yo utilizo excel del Office 2003..

Y tu sugerencia permite la hoja tal y como la deseaba:

- Proteger un rango contra modificaciones, a la vez que permite aplicar formato (color) a sus celdas y, copiar ese rango a otra parte de la misma hoja donde además de poder aplicar formato, se permite el cambio de su contenido.

Me abruma saber ahora, que la solución la tenía frente a mi..

Gracias.
 
Upvote 0
Samuel,
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>
Gracias por haber compartido su código con nosotros. Usted me hizo sonreír porque nunca había visto a alguien usar validación en esta manera. Uno nunca sabe cuándo se va a ver alguito nuevo.
Sí se puede aplicar esa validación por medio de VBA, pero la solución más robusto sería ponerla antes de todo y no depender de VBA si se puede evitar porque un usuario siempre se puede negar que corre una rutina de VBA si tiene seguridad de medio para arriba y el proyecto lleva una firma digital desconocida.<o:p></o:p>

Pero si uno decide siempre usar VBA entonces unos pensamientos sobre su código:

En su línea
Code:
If bolResp = 2 Then
uno de dos, ponga un comentario explicando qué significa el número dos o usar el constante de VBA
Code:
if bolResp = vbNo then
<o:p></o:p>

Después usted usó una mezcla de codename y name. Mejor y más robusto usar solamente los codenames. Así, si por usted o por el usuario el nombre de la hoja cambia su código no quiebra. También para hojas de uso especial no tenga miedo cambiar el nombre a algo con más significado que “hoja1” y si usted no quiere que el usuario puede desesconder la hoja manualmente y no ha protegido la estructura del cuaderno, “muy escondido” sería una opción mejor.

Code:
        Hoja1.Visible = xlSheetVisible
        hojaEscondeMe.Visible = xlSheetVeryHidden

Usted tiene esta línea
Code:
    lngFila = 36
que es un constante. Esto llamamos “números mágicos” y es mejor colocarlos arriba en un procedimiento que tenerlos regados por todo lado. O sea…
Code:
Private Sub Workbook_Open()
    Const c_lngFila As Long = 36
Y de ultimo, usted últimamente va a terminar donde empezó, usando protección de la hoja. Porque sin protección, el usuario solamente tiene que escoger “borrar validación” del menú / cinta y todo su protección evapora como un charco en Sonora en julio.<o:p></o:p>
 
Last edited:
Upvote 0

Forum statistics

Threads
1,223,969
Messages
6,175,680
Members
452,667
Latest member
vanessavalentino83

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top