VBA Excel 2003: Bloquear celda si no se completa otra

Para Dante Amor o Elsa Matilde

Que tal, estuve buscando en todos lados y no encuentro una macro que se ajuste a mis necesidades:

  1. Bloquear la celda C8 si la celda B8 está vacía
  2. Bloquear F8:H8 si la celda G8 está vacía

1 Respuesta

Respuesta
1

H o l a:

Primero, tienes que quitar el bloqueo a toda las celdas.

Segundo, tienes que proteger la hoja.

Tercero, cada que modifiques la celda B8 o G8 las otras celdas se bloquearán.

Si escribes algo en B8 la celda C8 se desbloquea

Si borras la celda B8 la celda C8 se bloquea

Cambia en la macro el password "abc" para proteger la hoja.


Pon la macro en los eventos de tu hoja.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address(False, False) = "B8" Then
        ActiveSheet.Unprotect "abc"
        If Target = "" Then
            Range("C8").Locked = True
        Else
            Range("C8").Locked = False
        End If
        ActiveSheet.Protect "abc"
    End If
    If Target.Address(False, False) = "G8" Then
        ActiveSheet.Unprotect "abc"
        If Target = "" Then
            Range("F8,H8").Locked = True
        Else
            Range("F8,H8").Locked = False
        End If
        ActiveSheet.Protect "abc"
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. Del lado derecho copia la macro

Excelente! pero falta un detalle. Si por esas casualidades ingresan un espacio vacío, Excel lo toma como dato (necesito que esto NO sea así)

Te anexo la macro actualizada

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address(False, False) = "B8" Then
        ActiveSheet.Unprotect "abc"
        If WorksheetFunction.Trim(Target) = "" Then
            Range("C8").Locked = True
        Else
            Range("C8").Locked = False
        End If
        ActiveSheet.Protect "abc"
    End If
    If Target.Address(False, False) = "G8" Then
        ActiveSheet.Unprotect "abc"
        If WorksheetFunction.Trim(Target) = "" Then
            Range("F8,H8").Locked = True
        Else
            Range("F8,H8").Locked = False
        End If
        ActiveSheet.Protect "abc"
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas