1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

Solucionado Que no se pueda escribir en una celda

Tema publicado en 'Macros y programación VBA' iniciado por delvalle, 5 Jun 2011.

Estado del tema:
Cerrado para nuevas respuestas
  1. delvalle

    delvalle Usuario

    Registrado:
    14 Dic 2010
    Mensajes:
    159
    Me Gusta recibidos:
    1
    Hola, como puedo hacer mediante una macro para que en C1 por ejemplo no me deje escribir nada cuando se de una determinada condición. Ya que tengo este código desarrollado:

    CÓDIGO:
    If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
    [B]    .Offset = ""[/B]
        MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
    End If
    
    Tengo puesto lo que está en negrita, pero necesito otra opción que sea mas restrictiva y que directamente no me deje escribir, ya que con esto puedo escribir pero una vez que le doy a enter se pone en blanco.

    Salu2
  2. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.522
    Me Gusta recibidos:
    296
    Buenas suponiendo que esto este en el eento de selectionchange prueba con

    CÓDIGO:
    If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
    MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
    Range("B" & xFil).Select
    End If
    
    un saludo
  3. delvalle

    delvalle Usuario

    Registrado:
    14 Dic 2010
    Mensajes:
    159
    Me Gusta recibidos:
    1
    Hola logroastur, en este caso no quiero que se vaya a la celda B sino que se quede en la misma celda, y lo que quiero añadir es que no se pueda escribir en esta celda cuando se de esta condición:
    CÓDIGO:
    If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
    Salu2
  4. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.522
    Me Gusta recibidos:
    296
    bien no entiendo el proposito de que si se pueda seleccionar peo no escribir, pero bueno, puedes realizar dos cosas o bien colocar que el la hoja este con password y las celdas protegidas colocando codigo para que se quite la protección solamente a la fila que debe de ser modificada o bien colocar en validación de datos la siguiente formula en personalizado

    CÓDIGO:
    =Y(B2<>"";B1<>"")
    desmarcas la casilla de omitir blancos y luego pegas en el resto de la columna C

    un saludo
  5. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.522
    Me Gusta recibidos:
    296
    Buenas si lo deseas mediante macro puedes probar con lo siguiente

    CÓDIGO:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim xFil
    With Target
        If .Count > 1 Then Exit Sub
        If .Column <> 3 Then Exit Sub
        If .Row < 3 Then Exit Sub
        xFil = .Row
        If Range("B" & xFil) = Empty Or Range("B" & xFil - 1) = Empty Then Exit Sub
        ActiveSheet.Unprotect Password:=1234
            Columns("C:C").Locked = True
            .Locked = False
        ActiveSheet.Protect Password:=1234
    End With
    End Sub
    
    debes de tener las celdas de la columna B desprotegidas

    un saludo
  6. delvalle

    delvalle Usuario

    Registrado:
    14 Dic 2010
    Mensajes:
    159
    Me Gusta recibidos:
    1
    Hola logroastur desde un primer momento debí subir el archivo para no liar a los que intentan ayudar, en este caso a ti, asi que lo subo ahora y te pido disculpas.

    Salu2

    Adjuntos:

  7. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.522
    Me Gusta recibidos:
    296
    Buenas prueba con lo siguiente

    CÓDIGO:
      If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
            .Offset = ""
            MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
            With Range("B" & Rows.Count).End(xlUp)(2)
                 .Interior.Color = RGB(0, 0, 0)
                 .Select
            End With
            MsgBox "Seleccione primero en la celda " & ActiveCell.Address(0, 0) & " si la posición de esta operación es CORTA o LARGA", , "ERROR DE SELECCIÓN"
        End If
    
    un saludo
  8. delvalle

    delvalle Usuario

    Registrado:
    14 Dic 2010
    Mensajes:
    159
    Me Gusta recibidos:
    1
    Que grande logroastur!!! Lo unico que he intentado unir esto, mediante "a:" pero solo me funciona la parte de arriba:

    CÓDIGO:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim xFil
    With Target
    
      If .Count > 1 Then Exit Sub
        If .column <> 2 Or .Row < 5 Or .Row > 14 Then Exit Sub
        xFil = .Row
      If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
            .Offset = ""
            MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
            With Range("B" & Rows.Count).End(xlUp)(2)
                 .Interior.Color = RGB(0, 0, 0)
                 .Select
            End With
    End If
    
    [COLOR="Red"][B]a:[/B][/COLOR]
    
        If .Count > 1 Then Exit Sub
        If .column <> 4 Or .Row < 5 Or .Row > 14 Then Exit Sub
        xFil = .Row
        Range("B" & xFil).Interior.Color = RGB(255, 239, 203)
        If Range("B" & xFil) = Empty And Range("B" & xFil - 1) <> Empty Then
        Range("B" & xFil).Interior.Color = RGB(0, 0, 0)
        .Interior.Color = RGB(0, 0, 0)
            MsgBox "Celda bloqueada, seleccione primero en la celda " & Range("B" & xFil).Address(0, 0) & " si la posición de esta operación es CORTA o LARGA", , "ERROR DE SELECCIÓN"
            .Interior.Color = xlNone
            With .Offset(, -2)
            .Interior.Color = RGB(0, 0, 0)
            .Select
            End With
    End If
    
    
      If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
            .Offset = ""
            MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
            With Range("B" & Rows.Count).End(xlUp)(2)
                 .Interior.Color = RGB(0, 0, 0)
                 .Select
            End With
            MsgBox "Seleccione primero en la celda " & ActiveCell.Address(0, 0) & " si la posición de esta operación es CORTA o LARGA", , "ERROR DE SELECCIÓN"
        End If
    
    End With
    End Sub
    Salu2
  9. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.522
    Me Gusta recibidos:
    296
    Buenas pueba

    CÓDIGO:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim xFil
        With Target
            If .Count > 1 Then Exit Sub
            Select Case .Column
            Case 2
                If .Column <> 2 Or .Row < 5 Or .Row > 14 Then Exit Sub
                xFil = .Row
                If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
                    .Offset = ""
                    MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
                    With Range("B" & Rows.Count).End(xlUp)(2)
                    .Interior.Color = RGB(0, 0, 0)
                    .Select
                    End With
                End If
            Case 4
                If .Column <> 4 Or .Row < 5 Or .Row > 14 Then Exit Sub
                xFil = .Row
                Range("B" & xFil).Interior.Color = RGB(255, 239, 203)
                If Range("B" & xFil) = Empty And Range("B" & xFil - 1) <> Empty Then
                    Range("B" & xFil).Interior.Color = RGB(0, 0, 0)
                    .Interior.Color = RGB(0, 0, 0)
                    MsgBox "Celda bloqueada, seleccione primero en la celda " & Range("B" & xFil).Address(0, 0) & " si la posición de esta operación es CORTA o LARGA", , "ERROR DE SELECCIÓN"
                    .Interior.Color = xlNone
                    With .Offset(, -2)
                        .Interior.Color = RGB(0, 0, 0)
                        .Select
                    End With
                End If
            Case 3
                If Range("B" & xFil) = Empty And Range("B" & xFil - 1) = Empty Then
                    .Offset = ""
                    MsgBox "Celda bloqueada", , "ERROR DE SELECCIÓN"
                    With Range("B" & Rows.Count).End(xlUp)(2)
                        .Interior.Color = RGB(0, 0, 0)
                        .Select
                    End With
                    MsgBox "Seleccione primero en la celda " & ActiveCell.Address(0, 0) & " si la posición de esta operación es CORTA o LARGA", , "ERROR DE SELECCIÓN"
                End If
            End Select
        End With
    End Sub
    
    un saludo
    A delvalle le gusta esto.
  10. delvalle

    delvalle Usuario

    Registrado:
    14 Dic 2010
    Mensajes:
    159
    Me Gusta recibidos:
    1
    Gracias!!! funciona perfectamente.

    Salu2.
Estado del tema:
Cerrado para nuevas respuestas

Compartir esta página